Je voudrais vérifier si deux tableaux sont égaux. Je veux dire: même taille, même indice, mêmes valeurs. Comment puis je faire ça?
En utilisant !==
comme suggéré par un utilisateur, je m'attends à ce que ce qui suit imprime enter si au moins un élément du ou des tableaux est différent, mais en fait ce n'est pas le cas.
if (($_POST['atlOriginal'] !== $oldAtlPosition)
or ($_POST['atl'] !== $aext)
or ($_POST['sidesOriginal'] !== $oldSidePosition)
or ($_POST['sidesOriginal'] !== $sideext)) {
echo "enter";
}
=
trop, cela devrait être!==
ou!=
['a'] == [0]
esttrue
. Eh bien, c'est juste PHP.Réponses:
Voir Opérateurs de baies .
ÉDITER
L'opérateur d'inégalité est
!=
alors que l' opérateur de non-identité!==
doit correspondre à l'opérateur d'égalité==
et à l'opérateur d'identité===
.la source
array_values($a)==array_values($b)
... Un autre problème habituel concerne les valeurs uniques, alors n'oubliez pas qu'elles existentarray_unique()
.==
fonctionne indépendamment de l'ordre uniquement pour les dictionnaires typiques comme[1 => 'a', 2 => 'b']
. Par exemple[1 => 'a', 2 => 'b'] == [2 => 'b', 1 => 'a']
. Pour les tableaux indexés comme['a', 'b']
==
ne fonctionne pas comme indiqué. Par exemple['a', 'b'] != ['b', 'a']
.['a', 'b']
est un tableau[0 => 'a', 1 => 'b']
, tandis que['b', 'a']
est un tableau[0 => 'b', 1 => 'a']
. C'est pourquoi ils n'ont pas les mêmes paires clé / valeur comme indiqué dans ma réponse et c'est pourquoi==
ne fonctionne pas entre ceux-ci.Selon cette page .
REMARQUE: la réponse acceptée fonctionne pour les tableaux associatifs, mais elle ne fonctionnera pas comme prévu avec les tableaux indexés (expliqués ci-dessous). Si vous souhaitez comparer l'un ou l'autre, utilisez cette solution. En outre, cette fonction peut ne pas fonctionner avec les tableaux multidimensionnels (en raison de la nature de la fonction array_diff).
Test de deux tableaux indexés, dont les éléments sont dans un ordre différent, en utilisant
$a == $b
ou$a === $b
échoue, par exemple:C'est parce que ce qui précède signifie:
array(0 => "x", 1 => "y")
par rapport àarray(0 => "y", 1 => "x")
.Pour résoudre ce problème, utilisez:
La comparaison des tailles de tableau a été ajoutée (suggérée par super_ton) car elle peut améliorer la vitesse.
la source
array_diff
pourrait accélérer la comparaison. Je vais l'ajouter. Merci$a = [1, 2, 2]; $b = [2, 1, 1];
et il est revenutrue
, mais les deux tableaux ne sont évidemment pas les mêmes.Essayez de sérialiser. Cela vérifiera également les sous-réseaux imbriqués.
la source
Solution courte qui fonctionne même avec des tableaux dont les clés sont données dans un ordre différent:
la source
Comparez-les avec d'autres valeurs:
Vous pouvez lire sur tous les opérateurs de tableau ici: http://php.net/manual/en/language.operators.array.php Notez par exemple que cela
===
vérifie également que les types et l'ordre des éléments dans les tableaux sont les mêmes.la source
===
fonction du comportement souhaité.!===
ne fonctionnera pas car il s'agit d'une erreur de syntaxe. La bonne façon est!==
(pas trois symboles "égaux à")la source
De mon point de vue, il est préférable d'utiliser array_diff que array_intersect car avec des vérifications de cette nature, les différences retournées sont généralement inférieures aux similitudes, de cette façon la conversion booléenne est moins gourmande en mémoire.
Modifier Notez que cette solution est pour les tableaux simples et complète celle == et === publiée ci-dessus qui n'est valable que pour les dictionnaires.
la source
array_diff - Calcule la différence des tableaux
http://php.net/manual/en/function.array-diff.php
la source
array_diff
ne peux pas vous le dire. Essayezarray_diff([1, 2], [1, 2, 'hello'])
.Une autre méthode pour vérifier l'égalité indépendamment de l'ordre des valeurs fonctionne en utilisant http://php.net/manual/en/function.array-intersect.php , comme ceci:
Voici une version qui fonctionne également avec des tableaux multidimensionnels utilisant http://php.net/manual/en/function.array-uintersect.php :
la source
la source
Une façon: (implémenter «considéré comme égal» pour http://tools.ietf.org/html/rfc6902#section-4.6 )
De cette façon, les tableaux associatifs dont les membres sont classés différemment - par exemple, ils seraient considérés comme égaux dans toutes les langues, mais php :)
la source
$a[$key] = rksort($a[$key]);
Problème de syntaxe sur vos tableaux
la source
Voici l'exemple comment comparer aux tableaux et obtenir ce qui est différent entre eux.
Résultat:
la source
Utilisez la fonction php array_diff (array1, array2);
Il retournera la différence entre les tableaux. Si c'est vide, ils sont égaux.
exemple:
Exemple 2:
la source
(count(array_diff($a1, $a2)) + count(array_diff($a2, $a1))) === 0
pour tester si les tableaux sont "égaux"Si vous souhaitez vérifier les tableaux non associatifs, voici la solution:
la source