Position actuelle: Accueil> Derniers articles> L'utilisation abusive de Array_Change_Key_Case () provoque la perte des données du nom de clé

L'utilisation abusive de Array_Change_Key_Case () provoque la perte des données du nom de clé

M66 2025-04-28

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.

1. Fonction Introduction

 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).

2. Exemple dangereux: le conflit de cas de clé provoque une perte de données

 $data = [
    'Name' => 'Alice',
    'name' => 'Bob',
    'Age'  => 25,
];

$result = array_change_key_case($data, CASE_LOWER);

print_r($result);

Résultat de sortie:

 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» !

3. Pourquoi cela se produit-il?

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.

4. Comment éviter cette fosse?

? Méthode 1: Vérifiez manuellement les conflits

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);
}

? Méthode 2: Standardiser les données source avant la fusion

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);

5. Résumé

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!

?? Conseils:

  • 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!