GraphQL APIを使用してデータを取得する場合、複雑な構造を持つネストされたアレイを扱うことがよくあります。 GraphQLはフィールド名のケーススタイル(CamelCase、Snake_Caseなど)を制限していないため、返されたデータには異なる形式でキー名が混合される可能性があります。 PHPでこれらのキー名のケースを統一したい場合、 array_change_key_case()は非常に実用的な機能です。
この記事では、GraphQL APIによって返されたデータを処理して均一に小文字または大文字のキー名の効果を実現する際に、再帰ロジックと組み合わせてarray_change_key_cease()関数を使用する方法を紹介します。
array_change_key_case()は、配列のすべてのキー名を小文字または大文字に変換するPHPビルトイン関数です。
array_change_key_case(array $array, int $case = CASE_LOWER): array
$ケースオプションパラメーター:
case_lower :デフォルト、小文字に変換します
case_upper :大文字に変換します
次のURLを介してGraphQLインターフェイスを要求して、記事のリストを取得するとします。
$url = 'https://m66.net/graphql';
リクエストによって返されるJSONデータは次のとおりです。
{
"data": {
"ArticleList": [
{
"ID": 101,
"Title": "PHP Array Tricks",
"Author": {
"Name": "John Doe",
"Email": "john@example.com"
}
}
]
}
}
オブジェクトのネストされた配列が含まれていることがわかり、キー名は形式で一貫していません。
array_change_key_case()自体は多次元配列をサポートしていないため、ネストされた構造を処理するために再帰関数をカプセル化する必要があります。
function change_keys_case_recursive(array $array, int $case = CASE_LOWER): array {
$result = [];
foreach ($array as $key => $value) {
$newKey = ($case === CASE_UPPER) ? strtoupper($key) : strtolower($key);
if (is_array($value)) {
$result[$newKey] = change_keys_case_recursive($value, $case);
} else {
$result[$newKey] = $value;
}
}
return $result;
}
<?php
// からのシミュレーション GraphQL インターフェイスの取得 JSON データ
$json = '{
"data": {
"ArticleList": [
{
"ID": 101,
"Title": "PHP Array Tricks",
"Author": {
"Name": "John Doe",
"Email": "john@example.com"
}
}
]
}
}';
$data = json_decode($json, true);
// 小文字として統一されたキー名を持つカスタム関数を呼び出す
$normalizedData = change_keys_case_recursive($data, CASE_LOWER);
// 出力結果
print_r($normalizedData);
function change_keys_case_recursive(array $array, int $case = CASE_LOWER): array {
$result = [];
foreach ($array as $key => $value) {
$newKey = ($case === CASE_UPPER) ? strtoupper($key) : strtolower($key);
if (is_array($value)) {
$result[$newKey] = change_keys_case_recursive($value, $case);
} else {
$result[$newKey] = $value;
}
}
return $result;
}
?>
Array
(
[data] => Array
(
[articlelist] => Array
(
[0] => Array
(
[id] => 101
[title] => PHP Array Tricks
[author] => Array
(
[name] => John Doe
[email] => john@example.com
)
)
)
)
)
ご覧のとおり、すべてのキー名は小文字に変換されます。これは、後続のデータ処理とテンプレートレンダリングをより助長します。
array_change_key_case()と再帰ロジックを組み合わせてGraphQL APIによって返されるデータを処理する場合、大文字と小文字でキー名の均一性を簡単に実現できます。このような標準化された処理は、コードの読みやすさを向上させるだけでなく、ケースの矛盾によって引き起こされる潜在的なバグを回避します。キー名をプロジェクトのニーズに応じて小文字または大文字に変換することを選択し、柔軟に調整できます。