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 le texte suivant soit imprimé entrée si au moins un élément du ou des tableaux est différent, mais ce n'est pas le cas.
if (($_POST['atlOriginal'] !== $oldAtlPosition)
or ($_POST['atl'] !== $aext)
or ($_POST['sidesOriginal'] !== $oldSidePosition)
or ($_POST['sidesOriginal'] !== $sideext)) {
echo "enter";
}
$arraysAreEqual = ($a == $b); // TRUE if $a and $b have the same key/value pairs.
$arraysAreEqual = ($a === $b); // TRUE if $a and $b have the same key/value pairs in the same order and of the same types.
Voir Opérateurs de tablea .
EDIT
L'opérateur d'inégalité est !=
, tandis que l'opérateur de non-identité est !==
pour correspondre à l'opérateur d'égalité ==
et à l'opérateur d'identité ===
.
Selon cette page .
REMARQUE: La réponse acceptée fonctionne pour les tableaux associatifs, mais ne fonctionnera pas comme prévu avec les tableaux indexés (expliquée ci-dessous). Si vous souhaitez comparer l'un ou l'autre, utilisez cette solution. De plus, cette fonction peut ne pas fonctionner avec des tableaux multidimensionnels (en raison de la nature de la fonction array_diff).
Le 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:
<?php
(array("x","y") == array("y","x")) === false;
?>
C'est parce que ce qui précède signifie:
array(0 => "x", 1 => "y")
vs. array(0 => "y", 1 => "x")
.
Pour résoudre ce problème, utilisez:
<?php
function array_equal($a, $b) {
return (
is_array($a)
&& is_array($b)
&& count($a) == count($b)
&& array_diff($a, $b) === array_diff($b, $a)
);
}
?>
La comparaison des tailles de tableau a été ajoutée (suggérée par super_ton) car cela pourrait améliorer la vitesse.
Essayez de sérialiser. Cela vérifiera également les sous-tableaux imbriqués.
$foo =serialize($array_foo);
$bar =serialize($array_bar);
if ($foo == $bar) echo "Foo and bar are equal";
Comparez-les comme d'autres valeurs:
if($array_a == $array_b) {
//they are the same
}
Vous pouvez lire tous les opérateurs de tableau ici: http://php.net/manual/fr/language.operators.array.php Notez par exemple que ===
vérifie également que les types et ordre des éléments dans les tableaux sont les mêmes.
!===
ne fonctionnera pas car c'est une erreur de syntaxe. La manière correcte est !==
(et non trois symboles "égaux à")
Solution courte qui fonctionne même avec les tableaux dont les clés sont données dans un ordre différent:
public static function arrays_are_equal($array1, $array2)
{
array_multisort($array1);
array_multisort($array2);
return ( serialize($array1) === serialize($array2) );
}
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 suit:
$array1 = array(2,5,3);
$array2 = array(5,2,3);
if($array1 === array_intersect($array1, $array2) && $array2 === array_intersect($array2, $array1)) {
echo 'Equal';
} else {
echo 'Not equal';
}
Voici une version qui fonctionne aussi avec les tableaux multidimensionnels utilisant http://php.net/manual/en/function.array-uintersect.php :
$array1 = array(
array(5, 2),
array(3, 6),
array(2, 9, 4)
);
$array2 = array(
array(3, 6),
array(2, 9, 4),
array(5, 2)
);
if($array1 === array_uintersect($array1, $array2, 'compare') && $array2 === array_uintersect($array2, $array1, 'compare')) {
echo 'Equal';
} else {
echo 'Not equal';
}
function compare($v1, $v2) {
if ($v1===$v2) {
return 0;
}
if ($v1 > $v2) return 1;
return -1;
}
if (array_diff($a,$b) == array_diff($b,$a)) {
// Equals
}
if (array_diff($a,$b) != array_diff($b,$a)) {
// Not Equals
}
De mon point de vue pov, il vaut mieux utiliser array_diff que array_intersect car avec des vérifications de cette nature, les différences renvoyées sont généralement inférieures aux similitudes, ce qui permet à la conversion bool de consommer moins de mémoire.
Édition Notez que cette solution s’applique aux tableaux simples et complète les == et === ceux affichés ci-dessus, qui ne sont valables que pour les dictionnaires.
Un moyen: (implémenter 'considéré égal' pour http://tools.ietf.org/html/rfc6902#section-4.6 )
De cette façon, les tableaux associatifs dont les membres sont ordonnés différemment - par ex. ils seraient considérés égaux dans toutes les langues sauf php :)
// recursive ksort
function rksort($a) {
if (!is_array($a)) {
return $a;
}
foreach (array_keys($a) as $key) {
$a[$key] = ksort($a[$key]);
}
// SORT_STRING seems required, as otherwise
// numeric indices (e.g. "0") aren't sorted.
ksort($a, SORT_STRING);
return $a;
}
// Per http://tools.ietf.org/html/rfc6902#section-4.6
function considered_equal($a1, $a2) {
return json_encode(rksort($a1)) === json_encode(rksort($a2));
}
array_diff - Calcule la différence de tableaux
http://php.net/manual/en/function.array-diff.php
array array_diff ( array $array1 , array $array2 [, array $... ] )
Compare
array1
à un ou plusieurs autres tableaux et renvoie les valeurs dansarray1
qui ne figurent dans aucun des autres tableaux.
Si vous souhaitez vérifier les tableaux non associatifs, voici la solution:
$a = ['blog', 'company'];
$b = ['company', 'blog'];
(count(array_unique(array_merge($a, $b))) === count($a)) ? 'Equals' : 'Not Equals';
// Equals
function compareIsEqualArray(array $array1,array $array):bool
{
return array_diff($array1,$array2)==[];
}
Utilisez la fonction php array_diff (array1, array2);
Cela retournera la différence entre les tableaux. Si c'est vide, ils sont égaux.
exemple:
$array1 = array(
'a' => 'value1',
'b' => 'value2',
'c' => 'value3'
);
$array2 = array(
'a' => 'value1',
'b' => 'value2',
'c' => 'value4'
);
$diff = array_diff(array1, array2);
var_dump($diff);
//it will print array = (0 => ['c'] => 'value4' )
Exemple 2:
$array1 = array(
'a' => 'value1',
'b' => 'value2',
'c' => 'value3',
);
$array2 = array(
'a' => 'value1',
'b' => 'value2',
'c' => 'value3',
);
$diff = array_diff(array1, array2);
var_dump($diff);
//it will print empty;
Problème de syntaxe sur vos tableaux
$array1 = array(
'a' => 'value1',
'b' => 'value2',
'c' => 'value3',
);
$array2 = array(
'a' => 'value1',
'b' => 'value2',
'c' => 'value3',
);
$diff = array_diff($array1, $array2);
var_dump($diff);