array_diff_uassoc est une fonction en PHP pour comparer les tableaux. Il renvoie un tableau contenant différentes paires de valeurs clés dans le premier tableau que les autres tableaux. Contrairement à Array_Diff_assoc , Array_Diff_uassoc permet aux utilisateurs de personnaliser les règles de comparaison et de comparer les clés des tableaux en passant des fonctions de comparaison personnalisées. Cependant, lorsque vous utilisez une fonction de comparaison personnalisée, vous pouvez rencontrer des problèmes causés par les erreurs de valeur de retour, surtout si les résultats de la comparaison ne correspondent pas aux attentes.
Cet article expliquera comment éviter ces problèmes et garantir que Array_Diff_uassoc fonctionne correctement.
La syntaxe de base de la fonction array_diff_uassoc est la suivante:
array_diff_uassoc(array $array1, array $array2, array $array3 = ?, callable $key_compare_func): array
$ Array1 : Le premier tableau est comparé comme le tableau de base.
$ array2, $ array3 : le tableau suivant, par rapport au premier tableau.
$ key_compare_func : une fonction de comparaison de clés personnalisée qui détermine comment comparer les clés d'un tableau.
La fonction de comparaison recevra deux paramètres (touches de deux tableaux) et doit renvoyer un entier (similaire à StrcMP , 0 signifie l'égalité, les valeurs négatives signifient que la première clé est petite et les valeurs positives signifient que la première clé est grande).
Dans les fonctions de comparaison personnalisées, les développeurs écrivent généralement du code pour comparer la taille de deux clés, mais une erreur facile est que la valeur de retour ne répond pas aux attentes. La valeur de retour de la fonction key_compare_func doit être un entier. Si d'autres types de données sont renvoyés (tels que des chaînes ou des booléens), Array_Diff_uassoc ne peut pas se comparer correctement, entraînant un comportement incohérent du programme.
function compare_keys($key1, $key2) {
// Retourner la chaîne au lieu de l'intégralité incorrectement
return ($key1 == $key2) ? 'equal' : ($key1 < $key2 ? 'less' : 'greater');
}
$array1 = ['a' => 1, 'b' => 2];
$array2 = ['a' => 1, 'c' => 3];
$result = array_diff_uassoc($array1, $array2, 'compare_keys');
print_r($result); // Le résultat attendu ne peut pas être retourné
Dans ce code, la fonction Compare_Keys renvoie incorrectement les chaînes «égales» , «moins» et «plus grandes» au lieu des entiers, ce qui fait que Array_Diff_Uassoc ne parvient pas à gérer correctement les résultats de comparaison.
function compare_keys($key1, $key2) {
// Retourner correctement entier
return ($key1 == $key2) ? 0 : (($key1 < $key2) ? -1 : 1);
}
$array1 = ['a' => 1, 'b' => 2];
$array2 = ['a' => 1, 'c' => 3];
$result = array_diff_uassoc($array1, $array2, 'compare_keys');
print_r($result); // Différence de retour normale
La valeur de retour doit suivre strictement les règles suivantes:
Si $ key1 et $ key2 sont égaux, retournez 0 .
Si $ key1 est inférieur à $ KEY2 , un nombre négatif est renvoyé.
Si $ key1 est supérieur à $ KEY2 , un nombre positif est retourné.
Si la plage de la valeur de retour dépasse ces règles, elle peut entraîner l'imprévisible le comportement de Array_Diff_uassoc .
function compare_keys($key1, $key2) {
// Retour d'une valeur booléenne de manière incorrecte
return ($key1 == $key2) ? false : true;
}
Dans ce cas, le résultat de comparaison ne répondra pas aux attentes et fera en sorte que Array_Diff_uassoc renvoie un résultat incorrect.
function compare_keys($key1, $key2) {
// La valeur de retour correcte est un entier
return ($key1 == $key2) ? 0 : (($key1 < $key2) ? -1 : 1);
}
Les fonctions de comparaison personnalisées peuvent impliquer une logique plus complexe, entraînant des problèmes de performances, en particulier lorsque les données de tableau sont importantes. Afin d'assurer une exécution efficace de Array_Diff_uassoc , il est recommandé de maintenir la simplicité et l'efficacité de la fonction de comparaison et d'éviter les calculs inutiles.
Lorsque vous utilisez Array_Diff_uassoc , il est crucial d'implémenter l'implémentation correcte des fonctions de comparaison personnalisées. Assurez-vous que la fonction de comparaison renvoie un entier et suit les règles de plage correctes (0, négatives, positives). Évitez de retourner d'autres types de données (tels que les booléens ou les chaînes) et maintenir les fonctions de comparaison concises et efficaces pour vous assurer que le programme fonctionne correctement.
Grâce à la méthode ci-dessus, nous pouvons éviter les erreurs dans la fonction de comparaison personnalisée, garantissant ainsi que Array_Diff_uassoc peut être exécuté correctement et donner les résultats attendus.