array_diff_assoc () est une fonction très pratique en php. Il est utilisé pour comparer les paires de valeurs clés de deux tableaux et renvoyer une partie différente du premier tableau que le deuxième tableau. Bien que cette fonction soit très intuitive, les développeurs ont tendance à mal comprendre son comportement lors de l'utilisation. Aujourd'hui, nous explorerons plusieurs pièges et malentendus communs dans array_diff_assoc () pour vous aider à mieux comprendre comment cela fonctionne.
array_diff_assoc () compare non seulement les valeurs dans le tableau, mais aussi les clés du tableau. Par conséquent, deux tableaux sont considérés comme «différents» même si les valeurs sont les mêmes, tant que les clés sont différentes. Ceci est différent du comportement de la fonction array_diff () , qui ne compare que les valeurs et ne se soucie pas des clés.
$array1 = [
0 => 'apple',
1 => 'banana'
];
$array2 = [
1 => 'banana',
0 => 'apple'
];
$result = array_diff_assoc($array1, $array2);
print_r($result);
Sortir:
Array
(
[0] => apple
)
expliquer:
Bien que les valeurs dans $ array1 et $ array2 soient les mêmes, array_diff_assoc () pense qu'elles sont différentes en raison de leurs différentes clés.
array_diff_assoc () compare strictement les valeurs et les clés du tableau, ce qui signifie qu'il vérifie non seulement les types, mais vérifie également si les types des valeurs correspondent. C'est-à-dire que le numéro 1 et la chaîne «1» seront considérés comme différents.
$array1 = [
'a' => 1,
'b' => '2'
];
$array2 = [
'a' => '1',
'b' => 2
];
$result = array_diff_assoc($array1, $array2);
print_r($result);
Sortir:
Array
(
[a] => 1
[b] => '2'
)
expliquer:
array_diff_assoc () traite le numéro 1 et la chaîne «1» comme des valeurs différentes. De même, «2» et 2 sont également considérés comme différents. Cette comparaison stricte nous fera accorder plus d'attention au type de données et éviter les résultats inattendus.
Si le premier paramètre de Array_Diff_assoc () est un tableau vide, il renverra directement le tableau vide. Ce comportement est raisonnable, mais certains développeurs peuvent mal comprendre qu'un tableau vide reviendra au tableau d'origine. En fait, array_diff_assoc () ne renvoie les résultats différentiels non vides que si les deux tableaux ont du contenu et qu'il existe des différences.
$array1 = [];
$array2 = [1 => 'apple', 2 => 'banana'];
$result = array_diff_assoc($array1, $array2);
print_r($result);
Sortir:
Array
()
expliquer:
Puisque $ array1 est vide, array_diff_assoc () renvoie un tableau vide indiquant qu'il n'y a pas de différence. Cela peut amener certains développeurs à penser à tort qu'il y a quelque chose qui ne va pas avec la fonction.
array_diff_assoc () ne compare que des paires de valeurs clés de tableaux unidimensionnels. Si un tableau contient des tableaux imbriqués, array_diff_assoc () ne compare pas récursivement les paires de valeurs clés de ces tableaux imbriqués.
$array1 = [
'a' => ['apple', 'orange'],
'b' => 'banana'
];
$array2 = [
'a' => ['apple', 'orange'],
'b' => 'banana'
];
$result = array_diff_assoc($array1, $array2);
print_r($result);
Sortir:
Array
()
expliquer:
Même si les valeurs dans Array1 et Array2 contiennent des tableaux imbriqués, array_diff_assoc () considérera toujours ces deux tableaux égaux car il ne compare pas récursivement le contenu du tableau imbriqué. Si vous devez comparer les tableaux imbriqués, vous devrez peut-être utiliser d'autres méthodes ou fonctions récursives.
Le tableau renvoyé par array_diff_assoc () ne contient que des paires de valeurs clés différentes du premier tableau. S'il n'y a pas de différence, la fonction renvoie un tableau vide. De nombreux développeurs l'ignorent lors de l'utilisation, les faisant mal comprendre les résultats de retour.
$array1 = [1, 2, 3];
$array2 = [1, 2];
$result = array_diff_assoc($array1, $array2);
print_r($result);
Sortir:
Array
(
[2] => 3
)
expliquer:
Dans cet exemple, array_diff_assoc () renvoie un élément de tableau avec une clé de 2 et une valeur de 3 , indiquant qu'il existe dans $ array1 et n'existe pas dans $ array2 .