Lorsque vous traitez des ensembles de différence de tableau dans PHP, Array_Diff () et Array_Diff_Ukey () sont deux fonctions fréquemment mentionnées. Cependant, pour certains besoins spécifiques, nous voyons souvent que les développeurs ont tendance à utiliser array_keys () avec array_diff () au lieu de array_diff_ukey () . Quelles sont les considérations derrière cela? Cet article combinera des exemples pour analyser les effets de ces deux méthodes et comparer les avantages et les inconvénients.
array_diff_ukey () est utilisé pour comparer les clés de deux tableaux en fonction des fonctions de rappel définies par l'utilisateur, des pièces qui existent dans le premier tableau mais qui n'existent pas dans d'autres tableaux. La syntaxe de cette fonction est la suivante:
array array_diff_ukey(array $array1, array $array2, callable $key_compare_func);
Par exemple:
function key_compare($a, $b) {
return strcmp($a, $b);
}
$array1 = ["a" => 1, "b" => 2, "c" => 3];
$array2 = ["b" => 4, "d" => 5];
$result = array_diff_ukey($array1, $array2, 'key_compare');
print_r($result); // Sortir: Array ( [a] => 1 [c] => 3 )
Étant donné que Array_Diff_ukey () utilise une fonction de rappel à titre de comparaison, il a un certain impact sur les performances et augmente la complexité du code. Dans certains cas, nous pouvons le remplacer par ce qui suit:
$array1 = ["a" => 1, "b" => 2, "c" => 3];
$array2 = ["b" => 4, "d" => 5];
// Obtenez l'ensemble de différence clé
$diffKeys = array_diff(array_keys($array1), array_keys($array2));
// Construire un nouveau tableau
$result = array_intersect_key($array1, array_flip($diffKeys));
print_r($result); // Sortir: Array ( [a] => 1 [c] => 3 )
La logique de cette méthode est:
Obtenez d'abord les noms clés des deux tableaux;
Utilisez Array_Diff () pour calculer l'ensemble des clés de différence;
Extraire ensuite les valeurs de clé correspondantes dans le tableau d'origine via array_intersect_key () .
Articles de comparaison | array_diff_ukey () | array_keys () + array_diff () |
---|---|---|
lisibilité | Moyen, besoin de définir une fonction de comparaison | Logique plus élevée et claire |
flexibilité | Logique de comparaison élevée et personnalisable | Généralement, la valeur par défaut est la comparaison des chaînes |
performance | Légèrement lent, impliquant des fonctions de rappel | Habituellement plus rapide, surtout pour de grandes quantités de données |
compatibilité | PHP est intégré, avec un bon support | Complètement basé sur des fonctions de base, une forte compatibilité |
Scénarios applicables | Logique de comparaison de clés complexe | Différence clé simple Définir le jugement |
Maintenabilité | Une fonction de rappel médiocre est sujette aux erreurs | OK, structure claire |
Dans la plupart des cas, si vous avez juste besoin de comparer s'il existe des différences dans les clés du tableau, utiliser array_keys () + array_diff () avec array_intersect_key () est plus intuitif, facile à lire et de meilleures performances. Et si vous avez besoin de personnaliser la logique de comparaison (comme la sensibilité à la casse, la comparaison numérique, etc.), array_diff_ukey () est un outil plus approprié.