Dans PHP, array_change_key_case () est une fonction pratique qui convertit tous les noms de clés dans un tableau en minuscules ou en majuscules. Mais de nombreuses personnes rencontreront un problème lors de l'utilisation de cette fonction pour la première fois:. pourquoi donc? Comment ça marche? Cet article l'analysera pour vous un par un à travers des exemples.
Voyons d'abord l'utilisation de base de array_change_key_case () :
$data = [
"Name" => "Alice",
"Age" => 25,
"Email" => "alice@m66.net"
];
$result = array_change_key_case($data, CASE_LOWER);
print_r($result);
Sortir:
Array
(
[name] => Alice
[age] => 25
[email] => alice@vv99.net
)
Comme vous pouvez le voir, tous les noms de clés sont devenus minuscules. Tout a l'air parfait.
Ajoutons un tableau imbriqué pour voir l'effet:
$data = [
"Name" => "Bob",
"Info" => [
"Email" => "bob@m66.net",
"City" => "New York"
]
];
$result = array_change_key_case($data, CASE_LOWER);
print_r($result);
Résultat de sortie:
Array
(
[name] => Bob
[info] => Array
(
[Email] => bob@vv99.net
[City] => New York
)
)
L'avez-vous remarqué? Le nom clé de la sous-bande d'informations n'a pas changé! C'est parce que:
array_change_key_case () ne prend effet que sur les premiers noms de clés de couche du tableau et ne traite pas les tableaux imbriqués récursivement.
À partir de la documentation officielle et du niveau de code source, nous pouvons savoir que l'essence de Array_Change_Key_Case () est de traverser le tableau et de manipuler directement chaque nom de clé de niveau supérieur . Si une valeur est un type de tableau, elle ne va pas à l'intérieur pour modifier davantage le nom de la clé.
autrement dit:
foreach ($array as $key => $value) {
$newKey = strtolower($key); // ou strtoupper($key)
$newArray[$newKey] = $value;
}
C'est aussi simple et grossier! Il n'y a pas de récursivité, pas de structure approfondie, elle est très efficace, mais elle est également très "limitée".
Si vous souhaitez convertir les noms clés des tableaux imbriqués ensemble, vous devez écrire vous-même la fonction récursive. Par exemple:
function change_keys_case_recursive(array $array, int $case = CASE_LOWER): array {
$newArray = [];
foreach ($array as $key => $value) {
$newKey = ($case === CASE_UPPER) ? strtoupper($key) : strtolower($key);
$newArray[$newKey] = is_array($value) ? change_keys_case_recursive($value, $case) : $value;
}
return $newArray;
}
$data = [
"Name" => "Charlie",
"Info" => [
"Email" => "charlie@m66.net",
"City" => "London"
]
];
$result = change_keys_case_recursive($data, CASE_LOWER);
print_r($result);
Sortir:
Array
(
[name] => Charlie
[info] => Array
(
[email] => charlie@vv99.net
[city] => London
)
)
Tout semble beaucoup plus raisonnable maintenant!
array_change_key_case () est non réécursif et n'agit uniquement sur les clés de la première couche du tableau.
Si vous avez besoin de convertir les noms de clés en tableaux multidimensionnels, vous devez utiliser une fonction récursive personnalisée.
Il s'agit également d'un problème courant avec de nombreuses fonctions intégrées en PHP: elles sont simples et faciles à utiliser, mais elles ont un support limité pour les structures complexes.
J'espère que cet article peut vous aider à comprendre à fond ce problème et être plus pratique la prochaine fois que vous écrivez du code pour traiter les tableaux!