Dans PHP, la fonction Array_Diff_ukey peut être utilisée pour comparer les clés de deux tableaux et les paires de valeurs de clé de retour correspondant aux clés qui n'existent pas dans le deuxième tableau du premier tableau. array_diff_ukey accepte une fonction de rappel qui détermine comment comparer les clés. Par défaut, Array_Diff_ukey utilise des comparaisons d'égalité strictes (c'est-à-dire === ), mais dans certains cas, nous devrons peut-être être des moyens de comparaison de clés plus flexibles ou spécifiques, qui peuvent être modifiés en fournissant une fonction de rappel personnalisée.
Cet article discutera de la façon d'utiliser des fonctions intégrées PHP, telles que StrnatCMP , en tant que fonction de rappel pour effectuer des comparaisons clés, améliorant ainsi les performances de Array_Diff_ukey , en particulier lorsqu'elle traite avec un grand nombre de tableaux.
Le prototype de fonction de Array_Diff_ukey est le suivant:
array_diff_ukey(array $array1, array $array2, callable $key_compare_func): array
$ array1 : le premier tableau
$ array2 : le deuxième tableau
$ key_compare_func : une fonction de rappel utilisée pour comparer les clés du tableau
Cette fonction renvoie un nouveau tableau contenant des éléments dans le premier tableau dont les clés n'existent pas dans le deuxième tableau.
StrnatCMP est une fonction intégrée en PHP pour comparer deux chaînes dans l'ordre naturel. Contrairement aux comparaisons de cordes conventionnelles, StrnatCMP permet le «tri naturel» des chaînes, c'est-à-dire, similaire au tri humain, les parties du nombre sont comparées par la taille numérique et les pièces de corde sont comparées alphabétiques.
L'exemple de code est le suivant:
$array1 = [
"10" => "a",
"2" => "b",
"100" => "c"
];
$array2 = [
"1" => "x",
"10" => "y"
];
// utiliser strnatcmp Comparaison des clés en tant que fonctions de rappel
$result = array_diff_ukey($array1, $array2, 'strnatcmp');
print_r($result);
Dans cet exemple, Array_Diff_ukey utilisera Strnatcmp pour comparer les clés de $ array1 et $ array2 . Si la clé de $ array1 n'apparaît pas dans $ array2 et est déterminée comme inégale en fonction des règles de commande naturelles, la paire de valeurs clés dans $ array1 sera conservée.
Par défaut, Array_Diff_ukey utilise une méthode de comparaison d'égalité stricte, === . Cela signifie que seuls les cas où les clés et les valeurs sont exactement les mêmes seront considérés comme égaux. L'utilisation de strnatcmp nous permet de traiter les pièces numériques dans une chaîne dans l'ordre naturel lors de la comparaison des clés, en particulier lors de la gestion des chaînes numériques.
Par exemple, pour les chaînes "10" et "2" , les comparaisons de cordes ordinaires penseront que "10" est inférieur à "2" , tandis que les comparaisons d'ordre naturel penseront que "2" est inférieur à "10" , ce qui est plus conforme à notre intuition quotidienne.
Lorsque nous traitons de grandes quantités de données, en particulier en ce qui concerne la comparaison clé, le choix de la bonne fonction de comparaison peut considérablement améliorer les performances. Par exemple, StrnatCMP peut être plus efficace que l'utilisation de fonctions de comparaison de chaînes régulières telles que StrCMP , en particulier lorsque les données contient un grand nombre de nombres.
De plus, les fonctions de comparaison intégrées dans PHP sont généralement optimisées et plus rapides que les fonctions de rappel que nous nous implémentons. Par conséquent, lors de l'optimisation des performances, le choix de la fonction intégrée appropriée comme fonction de rappel est un moyen simple et efficace.
Supposons que nous ayons deux tableaux contenant des clés sous forme de chaînes numériques. Nous voulons découvrir les paires de valeurs clés dans $ array1 qui n'existent pas dans $ array2 via array_diff_ukey , et nous voulons traiter les pièces numériques dans l'ordre naturel lors de la comparaison des clés. Il est très adapté d'utiliser strnatcmp .
$array1 = [
"100" => "a",
"2" => "b",
"20" => "c",
];
$array2 = [
"10" => "x",
"100" => "y",
];
$result = array_diff_ukey($array1, $array2, 'strnatcmp');
print_r($result);
Le résultat de la sortie est:
Array
(
[2] => b
[20] => c
)
En transmettant la fonction intégrée PHP strnatcmp , etc. en tant que fonction de rappel à array_diff_ukey , nous pouvons implémenter un moyen plus flexible de comparaison des clés et d'améliorer les performances dans certains cas. La méthode de comparaison du tri naturel est particulièrement adaptée à la manipulation des clés contenant des pièces numériques car elle suit des règles de tri numérique naturelles, évitant ainsi l'erreur des comparaisons de chaînes régulières.
Lorsque nous travaillons sur de grands ensembles de données, le choix d'une fonction intégrée appropriée pour la comparaison des clés est un moyen facile et efficace d'améliorer les performances. array_diff_ukey combiné avec strnatcmp nous permet de comparer les clés plus précisément et plus efficacement.