Position actuelle: Accueil> Derniers articles> Comment traiter les tableaux complexes par array_change_key_case () et array_map ()?

Comment traiter les tableaux complexes par array_change_key_case () et array_map ()?

M66 2025-04-27

Dans PHP, array_change_key_case () et array_map () sont tous deux des fonctions de traitement de la table très pratiques, mais elles fonctionnent différemment lors du traitement. Alors, ces deux fonctions peuvent-elles être combinées pour traiter les tableaux multidimensionnels? Discutons de ce problème ensemble.

1. Fonction Introduction

  • array_change_key_case (array $ array, int $ case = case_lower) : utilisé pour convertir tous les noms de clés dans un tableau en minuscules ou en majuscules.

  • array_map (callback $ callable, array $ array) : appliquez une fonction de rappel à chaque élément du tableau.

L'utilisation de ces deux fonctions est sans contrainte lors du traitement des tableaux unidimensionnels, mais en ce qui concerne le scénario de tableau multidimensionnel , un traitement logique supplémentaire est requis.

2. Risser des problèmes

Supposons que nous ayons un tableau multidimensionnel comme suit:

 $data = [
    "Name" => "Alice",
    "Details" => [
        "Age" => 25,
        "Email" => "alice@m66.net"
    ],
    "Preferences" => [
        "Colors" => ["Red", "Green"],
        "Languages" => ["PHP", "JavaScript"]
    ]
];

Nous voulons convertir tous les noms de clés en minuscules. À l'heure actuelle, si vous utilisez Array_Change_Key_Case () directement:

 $result = array_change_key_case($data, CASE_LOWER);

Nous ne pouvons gérer que les clés les plus externes , et les clés par détail et préférences ne seront pas converties.

Cela conduit à la question principale de cet article: Comment utiliser la combinaison de Array_Change_Key_Case () et Array_Map () pour traiter des tableaux multidimensionnels récursivement?

3. Solution: fonctions récursives

Nous pouvons personnaliser une fonction récursive, combinant array_change_key_case () pour gérer les touches à tous les niveaux:

 function recursive_change_key_case(array $array, int $case = CASE_LOWER): array {
    $newArray = array_change_key_case($array, $case);
    foreach ($newArray as $key => $value) {
        if (is_array($value)) {
            $newArray[$key] = recursive_change_key_case($value, $case);
        }
    }
    return $newArray;
}

Appelé:

 $processed = recursive_change_key_case($data, CASE_LOWER);
print_r($processed);

Résultat de sortie:

 Array
(
    [name] => Alice
    [details] => Array
        (
            [age] => 25
            [email] => alice@m66.net
        )

    [preferences] => Array
        (
            [colors] => Array
                (
                    [0] => Red
                    [1] => Green
                )

            [languages] => Array
                (
                    [0] => PHP
                    [1] => JavaScript
                )

        )

)

Comme vous pouvez le voir, tous les noms clés, y compris ceux au niveau imbriqué, ont également été convertis avec succès en minuscules .

4. Quel est le rôle de array_map ()?

Ainsi, array_map () peut-il être utilisé ici? Il convient principalement aux valeurs de traitement , pas aux clés. Si nous voulons traiter chaque valeur (plutôt que le nom de clé), comme la suppression des espaces dans les chaînes, la mise en forme, etc., nous pouvons l'utiliser en combinaison:

 function recursive_map(array $array, callable $callback): array {
    foreach ($array as $key => $value) {
        if (is_array($value)) {
            $array[$key] = recursive_map($value, $callback);
        } else {
            $array[$key] = $callback($value);
        }
    }
    return $array;
}

Par exemple, retirer les espaces de toutes les chaînes:

 $cleaned = recursive_map($processed, function($value) {
    return is_string($value) ? str_replace(' ', '', $value) : $value;
});

5. Résumé

  • array_change_key_case () peut convertir les noms de clés en supérieur et minuscule, mais ne prend en charge que les tableaux unidimensionnels ;

  • array_map () convient davantage au traitement des valeurs dans les tableaux et ne traite pas les clés;

  • Pour gérer la conversion de cas de nom de clé des tableaux multidimensionnels , vous pouvez combiner des fonctions personnalisées récursives pour l'implémenter;

  • Si vous souhaitez gérer les clés et les valeurs en même temps, les deux fonctions peuvent être utilisées ensemble et agir respectivement sur différents objectifs.

La maîtrise de ces techniques améliorera considérablement votre capacité à gérer les tableaux complexes en PHP. J'espère que cet article vous aide!