En PHP, les clés d'un tableau peuvent être des entiers ou des cordes. Lorsque nous travaillons sur les tableaux, en particulier lors de la comparaison des différences de tableau, il est particulièrement important de distinguer correctement ces deux types de clés. Cet article explorera comment utiliser la fonction PHP Array_Diff_uassoc () pour gérer cette situation et montrer comment gérer les différences lorsque les noms de clés sont des entiers et des chaînes.
La fonction Array_Diff_Uassoc () de PHP est une fonction qui peut comparer deux tableaux ou plus et renvoyer les différences entre elles. Il se compare non seulement sur la base des valeurs de tableau, mais permet également aux développeurs de personnaliser les fonctions qui comparent les noms de clés du tableau.
array_diff_uassoc(array $array1, array $array2, callable $key_compare_func): array
$ Array1 : Le premier tableau à comparer.
$ array2 : le deuxième tableau qui doit être comparé.
$ key_compare_func : une fonction de rappel pour la comparaison de nom de clé personnalisé.
Cette fonction renverra un nouveau tableau contenant les éléments de $ array1 qui n'apparaissent pas dans $ array2 . Il convient de noter que cette fonction compare non seulement les valeurs du tableau, mais compare également les clés du tableau.
En PHP, il existe des différences subtiles lorsque les clés d'un tableau sont des entiers et lorsque les clés sont des chaînes. Par exemple, Key 0 et Key '0' se ressemblent, PHP les considérera comme des clés différentes. Pour les comparaisons entre les clés numériques et les clés de chaîne, Array_Diff_uassoc () peut nous aider à mieux contrôler cette différence.
Supposons que nous ayons les deux tableaux suivants:
$array1 = [
0 => 'apple',
'1' => 'banana',
'orange' => 'orange'
];
$array2 = [
0 => 'apple',
1 => 'banana',
'orange' => 'orange'
];
Dans cet exemple, $ array1 et $ array2 ont deux valeurs identiques («pomme» et «banane»), mais leurs clés ne sont pas exactement les mêmes. La clé «1» dans $ array1 est une chaîne, tandis que la clé 1 dans $ array2 est un entier.
Pour que PHP compare les clés pour ces tableaux en fonction de nos besoins, vous pouvez utiliser une fonction de comparaison de nom de clé personnalisé. Par exemple, si nous voulons que les clés numériques et les clés de chaîne soient considérées comme les mêmes, nous pouvons créer une fonction de comparaison qui les convertit en un type uniforme à comparer.
Nous pouvons utiliser une fonction de rappel simple pour convertir toutes les touches en types de chaînes uniformément, puis comparer:
function key_compare_func($a, $b) {
return strcmp((string)$a, (string)$b);
}
Maintenant, nous utilisons array_diff_uassoc () pour comparer les deux tableaux et voir les différences entre elles:
<?php
$array1 = [
0 => 'apple',
'1' => 'banana',
'orange' => 'orange'
];
$array2 = [
0 => 'apple',
1 => 'banana',
'orange' => 'orange'
];
function key_compare_func($a, $b) {
return strcmp((string)$a, (string)$b);
}
$result = array_diff_uassoc($array1, $array2, 'key_compare_func');
print_r($result);
?>
Après avoir exécuté le code ci-dessus, $ Resultra sortira:
Array
(
[orange] => orange
)
Comme vous pouvez le voir, bien que $ array1 et $ array2 diffèrent dans les types de clés (chaîne vs entiers), PHP les compare comme la même clé via la fonction Array_Diff_uassoc () et notre fonction de comparaison de nom de clé personnalisée. Le résultat final renvoie la valeur correspondant à la clé «orange» .
La différence entre les noms de clés en tant qu'entiers et chaînes peut provoquer une certaine confusion lorsque vous travaillez avec des tableaux PHP, mais nous pouvons facilement résoudre ce problème avec array_diff_uassoc () et une fonction de comparaison de nom de clé personnalisée. En utilisant cette fonction raisonnablement, nous pouvons contrôler avec précision le comportement de comparaison des noms de clés de tableau pour nous assurer que notre programme peut effectuer des opérations de tableau comme prévu.
En utilisant array_diff_uassoc () , vous pouvez obtenir des comparaisons de différence de tableau plus flexibles, en particulier face aux types de noms de clés de tableau incohérents, qui peuvent éviter efficacement les erreurs potentielles.