Dans PHP, array_diff_key () et array_keys () sont couramment utilisés les fonctions de fonctionnement de la table. Le premier est utilisé pour comparer les différences de noms de clés des tableaux, et le second est utilisé pour obtenir le nom de clé du tableau. Dans certains cas, nous pouvons utiliser ces deux fonctions en même temps pour implémenter certaines opérations de tableau complexes. Cependant, lorsque Array_Diff_Key () et Array_Keys () sont utilisés ensemble, il est facile de provoquer des erreurs courantes. Cet article analysera les raisons en détail grâce à plusieurs exemples d'erreur courants et fournira des solutions.
Premièrement, la compréhension de l'utilisation de base de ces deux fonctions nous aide à mieux comprendre comment éviter les erreurs.
Fonction Array_Keys () : Renvoie un tableau de tous les noms de clés du tableau.
$array = ["a" => 1, "b" => 2, "c" => 3];
$keys = array_keys($array);
print_r($keys);
// Sortir:Array ( [0] => a [1] => b [2] => c )
Array_diff_key () Fonction: Utilisé pour comparer les noms de clés de deux tableaux et renvoyer la partie de différence, c'est-à-dire les noms de clés qui sont dans le premier tableau mais pas dans le deuxième tableau.
$array1 = ["a" => 1, "b" => 2, "c" => 3];
$array2 = ["b" => 10, "c" => 20];
$result = array_diff_key($array1, $array2);
print_r($result);
// Sortir:Array ( [a] => 1 )
Lors de la comparaison des différences de noms de clé, de nombreux développeurs utiliseront d'abord array_keys () pour obtenir le nom de clé du tableau et essayer de le comparer avec les noms clés d'autres tableaux, mais souvent des erreurs se produisent. En effet, array_keys () renvoie un tableau de noms de clés, pas l'ensemble des noms de clés du tableau d'origine. L'utilisation de Array_Diff_Key () conduira de cette manière à des résultats inexacts.
$array1 = ["a" => 1, "b" => 2, "c" => 3];
$array2 = ["b" => 10, "c" => 20];
// Dans le mauvais sens
$keys1 = array_keys($array1);
$result = array_diff_key($keys1, $array2);
print_r($result);
// Sortir:Array ( )
Analyse des problèmes : le tableau de nom de clé de l'arraie1 ["a", "b", "c"] est enregistré dans $ keys1 , plutôt que l'association entre le nom de clé et la valeur du tableau de tableau d'origine1. array_diff_key () est comparé par les noms de clés, et à ce moment Array_diff_key () utilise les noms de clés dans Keys1 pour comparaison, et le résultat n'est naturellement pas conforme aux attentes.
Correction : utilisez Array_Diff_Key () directement pour comparer le tableau d'origine.
// La bonne façon de le faire
$result = array_diff_key($array1, $array2);
print_r($result);
// Sortir:Array ( [a] => 1 )
Une autre erreur courante consiste à calculer la différence entre les noms de clés et les valeurs de deux tableaux en même temps, ce qui est sujet à la confusion. array_diff_key () ne comparera que les noms de clés, mais pas les valeurs de clé. Donc, si vous devez comparer les clés et les valeurs en même temps, vous pouvez obtenir des résultats inattendus.
$array1 = ["a" => 1, "b" => 2, "c" => 3];
$array2 = ["a" => 10, "b" => 2];
$result = array_diff_key($array1, $array2);
print_r($result);
// Sortir:Array ( [c] => 3 )
Analyse des problèmes : dans le code ci-dessus, array_diff_key () ne compare que les noms de clés, mais ne considère pas la valeur correspondante de la clé. Dans $ array1 , "A" et "B" sont les mêmes que les noms de clés de $ array2 , il n'y a donc pas de différence. Seulement si le nom de clé de "C" est différent du nom de clé de $ array2 sera retourné.
Solution : si vous souhaitez comparer les noms de clés, mais également les valeurs clés, vous pouvez utiliser array_diff_assoc () au lieu de Array_Diff_key () , qui comparera les noms et valeurs de clés en même temps.
$result = array_diff_assoc($array1, $array2);
print_r($result);
// Sortir:Array ( [a] => 1 [c] => 3 )
Comprendre la mauvaise utilisation des fonctions : plusieurs fois, les développeurs ne comprennent pas pleinement le rôle de Array_Keys () et Array_Diff_Key () , ce qui conduit à des erreurs lorsqu'ils sont utilisés ensemble.
Ne faites pas attention à la différence entre les clés et les valeurs : array_diff_key () ne comparera que les noms de clés du tableau, mais n'impliquez pas de valeurs de clé. Ignorer cela provoquera des écarts logiques par rapport aux développeurs et provoquera des erreurs inutiles.
Différences structurelles entre différents tableaux : Parfois, la structure du tableau est complexe et peut contenir des tableaux multidimensionnels ou contiennent différents types de clés (tels que des chaînes et des nombres). Pour le moment, vous devez prêter attention à l'utilisation de fonctions et de méthodes appropriées pour éviter les erreurs.
array_diff_key () et array_keys () sont deux fonctions de fonctionnement de l'arrivée puissantes, mais elles sont souvent sujettes à des erreurs lorsqu'elles sont utilisées ensemble, en particulier pour la distinction entre les noms de clés du tableau et les valeurs clés. Comprendre comment ils fonctionnent est crucial. En utilisant correctement ces fonctions et en évitant de confondre leurs fonctions, nous pouvons mieux gérer les opérations du tableau et éviter les erreurs courantes. Si vous souhaitez comparer non seulement les noms de clés, mais aussi les valeurs de clés, vous pouvez choisir d'utiliser array_diff_assoc () pour éviter des résultats inattendus.