Déterminer si deux tableaux sont égaux
Il y a plusieurs moyens en PHP pour comparer deux tableaux. Nous allons en voir quelques-uns.
Pour savoir si deux tableaux associatifs sont identiques, on peut utiliser les opérateurs == et ===.
La différence ?
== va vérifier que les associations clés/valeurs sont bien identiques dans les deux tableaux, peu importe l'ordre des clés et les types de clés et valeurs=== va vérifier que les associations clés/valeurs sont bien identiques dans les deux tableaux, dans le même ordre et du même type $identique1 = [
'username' => 'John',
'fullName' => 'John Doe',
'age' => 42,
];
$identique2 = [
'username' => 'John',
'fullName' => 'John Doe',
'age' => 42,
];
// ordre différent
$different1 = [
'age' => 42,
'username' => 'John',
'fullName' => 'John Doe',
];
// type différents
$different2 = [
'username' => 'John',
'fullName' => 'John Doe',
'age' => '42',
];
var_dump($identique1 == $identique2); // true
var_dump($identique1 === $identique2); // true
var_dump($identique1 == $different1); // true
var_dump($identique1 === $different1); // false
var_dump($identique1 == $different2); // true
var_dump($identique1 === $different2); // falseCe comportement est identique si les clés sont des entiers "déclarés"
$identique1 = [
0 => 'John',
1 => 'Jane',
2 => 'Baby',
];
$identique2 = [
0 => 'John',
1 => 'Jane',
2 => 'Baby',
];
$different = [
0 => 'John',
2 => 'Baby',
1 => 'Jane',
];
var_dump($identique1 == $identique2); // true
var_dump($identique1 === $identique2); // true
var_dump($identique1 == $different); // true
var_dump($identique1 === $different); // falseDans le cas d'un tableau classique, si l'ordre des valeurs diffère, alors la comparaison avec == retournera aussi false (normal car la clé aura changé)
$identique1 = [
'John',
'Jane',
42,
];
$identique2 = [
'John',
'Jane',
42,
];
$different = [
'John',
42,
'Jane',
];
var_dump($identique1 == $identique2); // true
var_dump($identique1 === $identique2); // true
var_dump($identique1 == $different); // false
var_dump($identique1 === $different); // falseDans ce cas, plusieurs possibilités :
sort modifie les tableaux) :sort($identique1);
sort($different);
var_dump($identique1 == $different); // truearray_diff :var_dump(
array_diff($identique1, $different) === [] &&
array_diff($different, $identique1) === []
); // trueCette méthode convertit les valeurs en string afin de les comparer ((string) $elem1 === (string) $elem2). Si on veut faire une comparaison plus stricte, il faut utiliser la méthode array_udiff
$identique1 = [
'John',
'Jane',
42,
];
$different = [
'John',
'Jane',
'42'
];
$strictCompare = fn($item1, $item2) => ($item1 === $item2) ? 0 : 1;
var_dump(
array_udiff($identique1, $different, $strictCompare) === [] &&
array_udiff($different, $identique1, $strictCompare) === []
); // falseOn ne peut pas utiliser le spaceship operator <=> dans la fonction anonyme, car il effectue une comparaison large (avec ==).
J’ai préparé un guide pratique avec une dizaine de conseils essentiels pour poser de bonnes bases.
👉 Bonnes pratiques, astuces spécifiques à PHP, exemples concrets… tout y est pour prendre de suite les bonnes habitudes.