PHPでは、 array_change_key_case()関数は、配列内のすべてのキー名を小文字または大文字に簡単に変換できます。しかし、アレイ全体のすべてのキーを変換したくない場合もありますが、それらを変換するだけです。現時点では、この目標を達成するために少しトリックが必要です。
この記事では、アレイ内の指定されたキーのarray_change_key_case()関数を「正確に」使用できる方法を紹介します。
次の配列があるとします。
$data = [
'Name' => 'Alice',
'AGE' => 25,
'Gender' => 'Female',
'Country' => 'Canada'
];
名前と国の主要な名前を小文字に変換したいだけで、残りは同じままです。標準のarray_change_key_case($ data、case_lower)はすべてのキーを変更しますが、これは明らかに私たちのニーズを満たしていません。
配列を繰り返し、指定したリストに現在のキーがあるかどうかを判断します。もしそうなら、ケース変換を実行してから配列を再構築します。
function change_selected_keys_case(array $array, array $keysToChange, int $case = CASE_LOWER): array {
$result = [];
foreach ($array as $key => $value) {
if (in_array($key, $keysToChange)) {
$newKey = ($case === CASE_UPPER) ? strtoupper($key) : strtolower($key);
} else {
$newKey = $key;
}
$result[$newKey] = $value;
}
return $result;
}
$data = [
'Name' => 'Alice',
'AGE' => 25,
'Gender' => 'Female',
'Country' => 'Canada'
];
$keysToChange = ['Name', 'Country'];
$modified = change_selected_keys_case($data, $keysToChange, CASE_LOWER);
print_r($modified);
Array
(
[name] => Alice
[AGE] => 25
[Gender] => Female
[country] => Canada
)
ご覧のとおり、名前と国のみが小文字に変換され、他のキーは変更されていません。
ネストされたアレイを処理する必要がある場合、またはキー名の一致がケースに依存する必要がある場合は、 strtolower()を使用してキー名などを比較するなど、機能をさらに最適化できます。
また、関数をより一般的なバージョンに変換することもできます。たとえば、コールバック関数をサポートして、特定のキーを変換するかどうかを決定することもできます。
function change_keys_with_callback(array $array, callable $shouldChange, int $case = CASE_LOWER): array {
$result = [];
foreach ($array as $key => $value) {
$newKey = $shouldChange($key) ?
(($case === CASE_UPPER) ? strtoupper($key) : strtolower($key)) :
$key;
$result[$newKey] = $value;
}
return $result;
}
使用例:
$modified = change_keys_with_callback($data, function($key) {
return in_array($key, ['Name', 'Country']);
});
PHPには、指定されたキーに対してのみarray_change_key_case()を使用するためのネイティブサポートはありませんが、単純なトラバーサルと判断のロジックを通じて同じ効果を達成できます。この方法は柔軟性があるだけでなく、実際の開発シナリオに非常に適した変換ロジックを制御することもできます。