現在の位置: ホーム> 最新記事一覧> array_change_key_case()とarray_map()で複雑な配列を処理する方法?

array_change_key_case()とarray_map()で複雑な配列を処理する方法?

M66 2025-04-27

PHPでは、 array_change_key_case()array_map()はどちらも非常に実用的な配列処理関数ですが、処理時に異なるパフォーマンスを発揮します。それで、これらの2つの機能を組み合わせて、多次元配列を処理できますか?この問題を一緒に議論しましょう。

1。関数の紹介

  • array_change_key_case(array $ array、int $ case = case_lower) :配列内のすべてのキー名を小文字または大文字に変換するために使用されます。

  • array_map(callable $ callback、array $ array) :配列内の各要素にコールバック関数を適用します。

これら2つの機能の使用は、1次元配列を処理する場合は応力がなくなりますが、多次元配列シナリオに関しては、追加の論理処理が必要です。

2。問題の上昇

次のように多次元配列があるとします。

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

すべてのキー名を小文字に変換したいと考えています。この時点で、 array_change_key_case()を直接使用する場合:

 $result = array_change_key_case($data, CASE_LOWER);

最も外側のキーのみを処理でき、詳細好みのキーは変換されません。

これは、この記事の中心的な質問につながります。Array_Change_Key_Case ()array_map()の組み合わせを使用して、多次元配列を再帰的に処理する方法は?

3。解決策:再帰関数

array_change_key_case()を組み合わせて、すべてのレベルでキーを処理するために、再帰関数をカスタマイズできます。

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

呼びかけ:

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

出力結果:

 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
                )

        )

)

ご覧のとおり、ネストされたレベルのものを含むすべてのキー名も、小文字に正常に変換されています

4。array_map()の役割は何ですか?

では、ここでarray_map()を使用できますか?キーではなく、値の処理に主に適しています。文字列のスペースを削除したり、フォーマットなどのスペースを削除したりするなど、各値を(キー名ではなく)処理したい場合は、組み合わせて使用​​できます。

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

たとえば、すべての文字列からスペースを削除します。

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

5。概要

  • array_change_key_case()は、キー名を上品および小文字に変換できますが、 1次元配列のみをサポートします

  • array_map()は、配列の値の処理に適しており、キーを処理しません。

  • 多次元配列のキー名のケース変換を処理するために、再帰的なカスタム関数を組み合わせて実装できます。

  • キーと値に同時に対処したい場合は、 2つの機能を一緒に使用して、それぞれ異なる目標に基づいて行動できます

これらのテクニックを習得すると、PHPで複雑な配列を処理する能力が大幅に向上します。この記事があなたを助けることを願っています!