Lors du traitement des tableaux en php, array_change_key_case () et array_merge () sont tous deux des fonctions très couramment utilisées. L'un peut convertir uniformément les clés d'un tableau en cas, et l'autre est utilisé pour fusionner les tableaux. Les deux semblent être simples et simples, mais quand ils le sont, ils sont faciles à rester coincés, surtout lorsqu'ils les traitent.
array_change_key_case (array $ array, int $ case = case_lower) : convertit tous les noms de clés du tableau en minuscules ou en majuscules.
array_merge (array ... $ arrays) : fusionnez un ou plusieurs tableaux.
Les noms de clés des tableaux dans PHP affichent différents "sensibilité" dans certaines fonctions - par exemple, array_merge () est sensible à la casse, tandis que Array_Change_Key_Case () sera uniformément cassé. Cela peut entraîner des problèmes tels que "la clé en double non écrasée" ou "écrasée inattendue" pendant la fusion.
$arr1 = ['Name' => 'Alice'];
$arr2 = ['name' => 'Bob'];
$result = array_merge(
array_change_key_case($arr1, CASE_LOWER),
array_change_key_case($arr2, CASE_LOWER)
);
print_r($result);
Array
(
[name] => Bob
)
Ça a l'air normal, non? Parce que nous sommes tous unifiés en minuscules. Mais si vous modifiez la commande:
$result = array_merge(
array_change_key_case($arr2, CASE_LOWER),
array_change_key_case($arr1, CASE_LOWER)
);
Array
(
[name] => Alice
)
Remarque: les valeurs couvertes sont différentes!
Cela montre que lorsque vous utilisez array_merge () et array_change_key_case () , l'ordre de traitement affectera directement le résultat.
$arr1 = ['Name' => 'Alice'];
$arr2 = ['name' => 'Bob'];
$result = array_change_key_case(
array_merge($arr1, $arr2), CASE_LOWER
);
print_r($result);
Array
(
[name] => Bob
)
Dans cet exemple, bien que Array_Merge () considère le nom et le nom comme deux clés différentes pendant la fusion, et ne devient minuscule après la fusion, afin que ce dernier Bob soit conservé, c'est-à-dire "il semble être répété, mais en fait, les deux touches existent lors de la fusion".
Et votre intention initiale est de fusionner en fonction d'une certaine clé, et cette écriture peut provoquer un comportement inattendu.
Pour éviter ces pièges, il est recommandé de suivre les règles suivantes lors de l'utilisation de ces deux fonctions:
Unifiez d'abord la casse supérieure et inférieure des noms de clés, puis fusionnez:
$result = array_merge(
array_change_key_case($arr1, CASE_LOWER),
array_change_key_case($arr2, CASE_LOWER)
);
Assurez-vous que le style de cas des clés dans la source de données est cohérent: il est préférable d'unifier les normes de cas pendant la génération de données ou la scène de la source.
Envisagez d'utiliser array_replace () au lieu de array_merge (): dans certains scénarios, array_replace () est plus conforme à la logique de "la maîtrise de la clé".
$result = array_replace(
array_change_key_case($arr1, CASE_LOWER),
array_change_key_case($arr2, CASE_LOWER)
);
array_merge () est sensible à la casse ;
array_change_key_case () est utilisé pour unifier le casse supérieur et inférieur des noms de clés ;
Lorsque les deux sont utilisés en combinaison, l'ordre de séquence et le cas d'origine des clés affecteront le résultat final;
Dans le développement réel, n'oubliez pas de faire la conversion de cas avant de fusionner pour éviter la "perte accidentelle" de données.
Ce type de pièges est particulièrement susceptible de se produire dans les scénarios d'application de la fusion de données multi-systèmes ou multi-sources, tels que l'agrégation d'interface (tels que https://api.m66.net/userinfo et https://api.m66.net/userdetail ). Si vous ne traitez pas à l'avance, vous pouvez "remplacer" les champs clés sans le savoir.
J'espère que cet article peut vous aider à éviter les pièges!