Dans PHP, la fonction array_diff_assoc () est utilisée pour comparer les différences entre deux tableaux ou plus, des éléments de retour dans le premier tableau qui ne sont pas dans d'autres tableaux et comparent les noms et valeurs de clés. Il s'agit d'une fonction très pratique, particulièrement adaptée à la comparaison des tableaux unidimensionnels.
Cependant, les choses deviennent un peu plus compliquées lorsque nous l'appliquons aux tableaux multidimensionnels. Cet article explorera l'application de Array_Diff_assoc () dans des tableaux multidimensionnels et donnera quelques suggestions sur la façon de gérer des situations complexes.
La fonction array_diff_assoc () est utilisée pour comparer les noms de clés et les valeurs de clé de deux tableaux. Si un nom et une valeur de clé existent dans le premier tableau mais n'existe pas dans l'autre tableau ou existe mais est différent, l'élément sera retourné.
grammaire:
array_diff_assoc(array $array1, array $array2, array ...$arrays): array
Array1 : le premier tableau.
Array2 : le deuxième tableau, qui peut comparer plusieurs tableaux.
Renvoie un tableau contenant des différences.
$array1 = [
"a" => "apple",
"b" => "banana",
"c" => "cherry"
];
$array2 = [
"a" => "apple",
"b" => "blueberry",
"d" => "date"
];
$result = array_diff_assoc($array1, $array2);
print_r($result);
Sortir:
Array
(
[b] => banana
[c] => cherry
)
Lorsque nous utilisons array_diff_assoc () pour comparer les tableaux multidimensionnels, le problème devient plus compliqué, car cette fonction compare uniquement les clés et les valeurs du réseau de niveau supérieur et ne peut pas comparer profondément le contenu du tableau multidimensionnel.
Supposons que nous ayons deux tableaux multidimensionnels et que nous voulons comparer leurs différences:
$array1 = [
"fruit" => [
"apple" => 3,
"banana" => 2,
],
"vegetable" => [
"carrot" => 5,
"cucumber" => 7
]
];
$array2 = [
"fruit" => [
"apple" => 3,
"banana" => 3,
],
"vegetable" => [
"carrot" => 5,
"cucumber" => 8
]
];
$result = array_diff_assoc($array1, $array2);
print_r($result);
Sortir:
Array
(
[fruit] => Array
(
[banana] => 2
)
[vegetable] => Array
(
[cucumber] => 7
)
)
Comme indiqué ci-dessus, Array_Diff_assoc () ne peut comparer que la structure de niveau supérieur d'un tableau et ne peut pas comparer profondément les éléments imbriqués dans les tableaux multidimensionnels.
Pour les tableaux multidimensionnels, nous devons personnaliser la fonction de comparaison pour comparer récursivement les différences de chaque élément. Nous pouvons gérer des situations complexes en appelant Array_Diff_assoc () récursivement ou en combinaison avec d'autres fonctions.
Nous pouvons écrire une fonction récursive qui gère manuellement les comparaisons des tableaux multidimensionnels. Voici un exemple de traitement des différences dans les tableaux multidimensionnels:
function array_diff_assoc_recursive($array1, $array2) {
$diff = [];
foreach ($array1 as $key => $value) {
// Si l'élément est un tableau,Puis appelez récursivement
if (is_array($value)) {
$diff[$key] = array_diff_assoc_recursive($value, $array2[$key] ?? []);
} else {
// Si la valeur est différente,Puis ajoutez-le au tableau de différence
if (!isset($array2[$key]) || $array2[$key] !== $value) {
$diff[$key] = $value;
}
}
}
return $diff;
}
$result = array_diff_assoc_recursive($array1, $array2);
print_r($result);
Sortir:
Array
(
[fruit] => Array
(
[banana] => 2
)
[vegetable] => Array
(
[cucumber] => 7
)
)
Avec cette approche, nous sommes en mesure de comparer récursivement les valeurs clés des tableaux multidimensionnels et d'obtenir des différences précises.
Bien que Array_Diff_assoc () soit une fonction très utile, il a certaines limites lorsqu'il s'agit de tableaux multidimensionnels. Afin de comparer les différences entre les tableaux multidimensionnels, nous devons obtenir des comparaisons plus précises grâce à la récursivité. Dans les scénarios d'application complexes, la rédaction de fonctions de comparaison récursive personnalisées est le meilleur moyen de gérer les différences dans les tableaux multidimensionnels.