Dans PHP, la fonction array_change_key_case () peut facilement convertir tous les noms de clés dans un tableau en minuscules ou en majuscules. Mais parfois, nous ne voulons pas convertir toutes les clés de l'ensemble du tableau, mais il suffit de les convertir. À l'heure actuelle, une petite astuce est nécessaire pour atteindre cet objectif.
Cet article introduira une méthode qui vous permet de "précisément" utiliser la fonction array_change_key_case () pour les clés spécifiées dans un tableau.
Supposons que nous ayons le tableau suivant:
$data = [
'Name' => 'Alice',
'AGE' => 25,
'Gender' => 'Female',
'Country' => 'Canada'
];
Nous voulons simplement convertir les noms clés du nom et du pays en minuscules, et le reste reste le même. La standard Array_Change_Key_Case ($ data, case_lower) modifiera toutes les clés, ce qui ne répond évidemment pas à nos besoins.
Nous pouvons itérer sur le tableau, déterminer si la clé actuelle se trouve dans la liste que nous avons spécifiée, et dans le cas, il effectuera une conversion de cas, puis reconstruire le tableau.
function change_selected_keys_case(array $array, array $keysToChange, int $case = CASE_LOWER): array {
$result = [];
foreach ($array as $key => $value) {
if (in_array($key, $keysToChange)) {
$newKey = ($case === CASE_UPPER) ? strtoupper($key) : strtolower($key);
} else {
$newKey = $key;
}
$result[$newKey] = $value;
}
return $result;
}
$data = [
'Name' => 'Alice',
'AGE' => 25,
'Gender' => 'Female',
'Country' => 'Canada'
];
$keysToChange = ['Name', 'Country'];
$modified = change_selected_keys_case($data, $keysToChange, CASE_LOWER);
print_r($modified);
Array
(
[name] => Alice
[AGE] => 25
[Gender] => Female
[country] => Canada
)
Comme vous pouvez le voir, seuls le nom et le pays sont convertis en minuscules et les autres clés n'ont pas changé.
Si vous devez faire face à des tableaux imbriqués, ou si la correspondance des noms de clés doit être insensible à la casse, vous pouvez optimiser davantage la fonction, comme l'utilisation de strtolower () pour comparer les noms de clés, etc.
Vous pouvez également transformer la fonction en une version plus générale, telles que la prise en charge des fonctions de rappel pour décider de convertir une certaine clé:
function change_keys_with_callback(array $array, callable $shouldChange, int $case = CASE_LOWER): array {
$result = [];
foreach ($array as $key => $value) {
$newKey = $shouldChange($key) ?
(($case === CASE_UPPER) ? strtoupper($key) : strtolower($key)) :
$key;
$result[$newKey] = $value;
}
return $result;
}
Exemple d'utilisation:
$modified = change_keys_with_callback($data, function($key) {
return in_array($key, ['Name', 'Country']);
});
Bien que PHP n'ait pas de support natif pour utiliser array_change_key_case () uniquement pour les clés spécifiées, nous pouvons réaliser le même effet grâce à une logique de traversée et de jugement simple. Cette méthode est non seulement flexible, mais vous permet également de contrôler la logique de conversion, qui est très adaptée aux scénarios de développement réels.