Dans PHP Development, Array_Change_Key_Case () est une fonction très pratique qui peut convertir tous les noms de clés dans un tableau en majuscules ou en minuscules. Mais savez-vous,
Prenons un exemple spécifique pour voir comment ce problème se produit.
array_change_key_case(array $array, int $case = CASE_LOWER): array
$ tableau : le tableau d'entrée.
$ CASE : Paramètre facultatif, par défaut est case_lower (en bas de cas), ou peut être défini sur case_upper (Upper Case).
$data = [
'Name' => 'Alice',
'name' => 'Bob',
'Age' => 25,
];
$result = array_change_key_case($data, CASE_LOWER);
print_r($result);
Array
(
[name] => Bob
[age] => 25
)
L'avez-vous vu? 'Nom' => 'Alice' est parti!
En effet, «nom» et «nom» deviennent tous les deux «noms» après avoir été converti en minuscules, ce qui fait «Alice» écrasé par «Bob» !
array_change_key_case () ne détecte pas s'il y a un nom de clé "de cas différent mais en fait le même", il remplace simplement et grossièrement le nom de la clé par une endite supérieure et en minuscules . Une fois qu'il y a un conflit, les clés derrière écraseront les clés avant et vous ne recevrez même pas d'avertissements ou d'erreurs.
Ceci est particulièrement dangereux lors du traitement des données à partir de plusieurs sources. Par exemple, lorsque vous effectuez une fusion de formulaire ou une fusion d'API, si vous ne réalisez pas le conflit de cas entre les noms de clés, les données seront perdues sans le savoir.
Avant d'appeler array_change_key_case () , vous pouvez d'abord détecter s'il y a un conflit de cas de nom de clé dans le tableau d'origine:
function hasKeyCaseConflict(array $array): bool {
$lowerKeys = [];
foreach ($array as $key => $value) {
$lower = strtolower($key);
if (isset($lowerKeys[$lower])) {
return true;
}
$lowerKeys[$lower] = true;
}
return false;
}
$data = [
'Name' => 'Alice',
'name' => 'Bob',
];
if (hasKeyCaseConflict($data)) {
echo "Il y a un conflit de cas entre les noms clés,Veuillez le traiter avant de convertir。";
} else {
$result = array_change_key_case($data);
print_r($result);
}
Si vous traitez des données externes, telles que le contenu tiré dans l'API, vous pouvez standardiser les données avant la fusion, ou spécifier les règles de nom de clé:
$apiData = json_decode(file_get_contents('https://m66.net/api/user'), true);
// En supposant que la source est fiable,Utilisez-le dans une baisse unifiée
$safeData = array_change_key_case($apiData, CASE_LOWER);
Bien que Array_Change_Key_Case () soit une fonction simple et pratique, sa destructivité potentielle ne peut pas être ignorée. Lorsqu'il peut y avoir de la duplication de noms de clés dans les données que vous traitez, assurez-vous de réfléchir à deux fois avant de le faire!
Le comportement par défaut ne provoque pas de conflits!
Les données peuvent être écrasées "tranquillement"!
Plus il y a de scénarios d'intégration de données, plus vous devez les utiliser!