PHPでは、 array_change_key_case()とarray_map()はどちらも非常に実用的な配列処理関数ですが、処理時に異なるパフォーマンスを発揮します。それで、これらの2つの機能を組み合わせて、多次元配列を処理できますか?この問題を一緒に議論しましょう。
array_change_key_case(array $ array、int $ case = case_lower) :配列内のすべてのキー名を小文字または大文字に変換するために使用されます。
array_map(callable $ callback、array $ array) :配列内の各要素にコールバック関数を適用します。
これら2つの機能の使用は、1次元配列を処理する場合は応力がなくなりますが、多次元配列シナリオに関しては、追加の論理処理が必要です。
次のように多次元配列があるとします。
$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()の組み合わせを使用して、多次元配列を再帰的に処理する方法は?
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
)
)
)
ご覧のとおり、ネストされたレベルのものを含むすべてのキー名も、小文字に正常に変換されています。
では、ここで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;
});
array_change_key_case()は、キー名を上品および小文字に変換できますが、 1次元配列のみをサポートします。
array_map()は、配列の値の処理に適しており、キーを処理しません。
多次元配列のキー名のケース変換を処理するために、再帰的なカスタム関数を組み合わせて実装できます。
キーと値に同時に対処したい場合は、 2つの機能を一緒に使用して、それぞれ異なる目標に基づいて行動できます。
これらのテクニックを習得すると、PHPで複雑な配列を処理する能力が大幅に向上します。この記事があなたを助けることを願っています!