Dans PHP, array_diff_uassoc () est une fonction utilisée pour comparer les différences de noms de clés et de valeurs de clés de deux tableaux ou plus. Il compare non seulement les valeurs du tableau, mais compare également les clés du tableau en fonction des fonctions de rappel définies par l'utilisateur. Lorsque vous traitez avec des tableaux unidimensionnels, array_diff_uassoc () est relativement simple à utiliser, mais lorsqu'il s'agit de tableaux multidimensionnels, comment pouvons-nous l'utiliser pour obtenir une comparaison de différence de valeur clé? Cet article répondra à cette question et fournira un exemple pratique.
Tout d'abord, passons en revue l'utilisation de base de array_diff_uassoc () . Sa syntaxe est la suivante:
array_diff_uassoc(array $array1, array $array2, callable $key_compare_func): array
Array1 : Le premier tableau à comparer.
Array2 : Le deuxième tableau à comparer avec le premier tableau.
key_compare_func : une fonction de rappel définie par l'utilisateur utilisé pour comparer les clés de deux tableaux. La fonction doit renvoyer un entier représentant le résultat de la comparaison de deux clés.
Renvoie un tableau contenant les éléments différentiels, c'est-à-dire une paire de valeurs clés qui existe dans Array1 mais n'est pas dans Array2 .
function compare_keys($key1, $key2) {
return strcasecmp($key1, $key2);
}
$array1 = [
'a' => 'apple',
'b' => 'banana',
'c' => 'cherry'
];
$array2 = [
'A' => 'apple',
'B' => 'banana',
'd' => 'date'
];
$result = array_diff_uassoc($array1, $array2, 'compare_keys');
print_r($result);
Sortir:
Array
(
[c] => cherry
)
Comme indiqué ci-dessus, array_diff_uassoc () compare les clés du tableau et déterminera si les deux clés sont égales en fonction de la fonction de rappel compare_keys () .
Pour les tableaux multidimensionnels, nous devrons peut-être comparer non seulement les clés de niveau supérieur, mais aussi les clés des tableaux imbriqués. Dans ce cas, array_diff_uassoc () ne peut pas être utilisé directement dans des tableaux multidimensionnels. Nous devons faire un travail supplémentaire pour gérer cette situation.
Traversé récursivement des tableaux multidimensionnels : Étant donné que les tableaux multidimensionnels sont des structures imbriquées, nous pouvons utiliser des méthodes récursives pour traiter chaque couche de tableau.
Comparaison des valeurs clés à l'aide de fonctions de rappel personnalisées : Pendant le processus de récursivité, nous pouvons définir une fonction de rappel pour la comparaison de différence de valeur de clé de chaque couche de tableau.
function compare_keys($key1, $key2) {
return strcasecmp($key1, $key2);
}
function recursive_array_diff_uassoc($array1, $array2, $key_compare_func) {
$result = [];
foreach ($array1 as $key => $value) {
// Si la valeur actuelle est un tableau,Appel récursif
if (is_array($value)) {
$sub_result = recursive_array_diff_uassoc($value, $array2[$key] ?? [], $key_compare_func);
if (!empty($sub_result)) {
$result[$key] = $sub_result;
}
} else {
// Comparez la valeur actuelle à la valeur dans le tableau cible
if (!isset($array2[$key]) || $key_compare_func($key, $key) !== 0) {
$result[$key] = $value;
}
}
}
return $result;
}
$array1 = [
'a' => 'apple',
'b' => ['ba' => 'banana', 'bb' => 'blueberry'],
'c' => 'cherry'
];
$array2 = [
'a' => 'apple',
'b' => ['ba' => 'banana', 'bb' => 'blackberry'],
'd' => 'date'
];
$result = recursive_array_diff_uassoc($array1, $array2, 'compare_keys');
print_r($result);
Sortir:
Array
(
[b] => Array
(
[bb] => blueberry
)
[c] => cherry
)
Dans cet exemple, nous traversons le tableau multidimensionnel récursivement et effectuons des comparaisons de différences de valeur clé pour chaque niveau de tableau. Notez que lors de la comparaison des tableaux multidimensionnels, nous traitons séparément les tableaux imbriqués.
La fonction Array_Diff_uassoc () ne prend pas directement en charge les différences de valeur clé de la comparaison des tableaux multidimensionnels, mais par des moyens récursifs, nous pouvons comparer les différences de valeur clé de chaque couche dans un tableau multidimensionnel. Grâce à des fonctions de rappel personnalisées, nous pouvons également contrôler avec précision la méthode de comparaison des clés, ce qui rend notre comparaison plus flexible et efficace. Grâce à l'exemple ci-dessus, nous pouvons clairement voir comment appliquer array_diff_uassoc () pour gérer des tableaux multidimensionnels complexes.