Position actuelle: Accueil> Derniers articles> array_change_key_case () et array_walk_recursive () pour traiter les tableaux multidimensionnels

array_change_key_case () et array_walk_recursive () pour traiter les tableaux multidimensionnels

M66 2025-04-24

Problèmes souvent rencontrés lors du traitement des données de réseau PHP, en particulier les données des interfaces externes. Cette situation peut causer beaucoup de problèmes lors de la fusion, de la recherche ou de la cartographie d'un tableau. Heureusement, PHP fournit plusieurs fonctions utiles, telles que Array_Change_Key_Case () et Array_Walk_Recursive () , ce qui peut nous aider à atteindre l'objectif de la conversion unifiée du nom de clé.

Mais le problème est: array_change_key_case () ne peut traiter que des tableaux unidimensionnels , tandis que Array_Walk_Recursive () peut traverser toutes les valeurs d'un tableau multidimensionnel, mais ne peut pas modifier directement le nom de la clé. Pouvons-nous donc combiner ces deux fonctions pour implémenter une solution qui prend en charge le cas unifié des noms de clés dans des tableaux multidimensionnels ?

La réponse est: oui! Nous pouvons utiliser des méthodes récursives pour pénétrer dans chaque couche de tableau et utiliser array_change_key_case () pour chaque couche, implémentant ainsi la conversion de nom de clé de l'ensemble du tableau multidimensionnel.

Exemple de code: le nom de la clé uniforme est les minuscules

 <?php

function change_array_keys_case_recursive(array $arr, int $case = CASE_LOWER): array {
    $result = [];

    foreach ($arr as $key => $value) {
        $newKey = ($case === CASE_LOWER) ? strtolower($key) : strtoupper($key);

        if (is_array($value)) {
            $result[$newKey] = change_array_keys_case_recursive($value, $case);
        } else {
            $result[$newKey] = $value;
        }
    }

    return $result;
}

// Exemple de tableau(Contient des clés mélangées à la partie supérieure et inférieure)
$data = [
    'UserName' => 'alice',
    'Email' => 'alice@m66.net',
    'Details' => [
        'Age' => 28,
        'Country' => 'Canada',
        'Preferences' => [
            'Theme' => 'Dark',
            'LANGUAGE' => 'EN'
        ]
    ]
];

// Unifier tous les noms de clés en minuscules
$normalized = change_array_keys_case_recursive($data);

print_r($normalized);
?>

Résultat de sortie:

 Array
(
    [username] => alice
    [email] => alice@m66.net
    [details] => Array
        (
            [age] => 28
            [country] => Canada
            [preferences] => Array
                (
                    [theme] => Dark
                    [language] => EN
                )
        )
)

Analyse des idées

  • array_change_key_case () est un outil appartenant à PHP pour traiter la conversion de cas de nom de clé, mais ne prend en charge que les tableaux unidimensionnels;

  • array_walk_recursive () convient pour modifier les valeurs dans un tableau (mais pas les clés), il n'est donc pas idéal pour nous ici;

  • Les fonctions récursives personnalisées sont la solution optimale actuelle, qui peut implémenter le traitement de chaque couche de tableau;

  • Évolutivité forte : modifiez simplement le paramètre de cas $ entrant pour prendre en charge la conversion Case_upper en majuscules.

Conclusion

Bien que les fonctions fournies par PHP nativement aient leurs propres limitations, en combinant et personnalisant raisonnablement des fonctions , nous pouvons créer une solution plus puissante et adaptable à des scénarios complexes. Pour les scénarios où des données externes d'entrée ou de nettoyage sont nécessaires pour traiter uniformément, cette méthode est non seulement pratique, mais a également une bonne lisibilité et une bonne maintenabilité.

Si vous avez affaire à des données d'interface complexes ou si vous rencontrez fréquemment des noms de clés incohérents pendant le développement, vous pourriez aussi bien essayer cette méthode de conversion unifiée.