在使用GraphQL API 獲取數據時,我們常常會處理結構複雜的嵌套數組。由於GraphQL 並不限製字段名的大小寫風格(如camelCase、snake_case 等),返回的數據中可能混合了不同格式的鍵名。如果你想在PHP 中統一這些鍵名的大小寫, array_change_key_case()是一個非常實用的函數。
本文將介紹如何在處理GraphQL API 返回的數據時,結合遞歸邏輯使用array_change_key_case()函數,實現鍵名統一為小寫或大寫的效果。
array_change_key_case()是PHP 內置函數,用於將數組的所有鍵名轉換為小寫或大寫。
array_change_key_case(array $array, int $case = CASE_LOWER): array
$case可選參數:
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
)
)
)
)
)
如你所見,所有鍵名都被統一轉為小寫,更利於後續的數據處理與模板渲染。
在處理GraphQL API 返回的數據時,結合array_change_key_case()與遞歸邏輯,可以輕鬆實現鍵名大小寫統一。這樣的規範化處理不僅提升代碼可讀性,還能避免因為大小寫不一致帶來的潛在Bug。你可以根據項目需要選擇將鍵名轉換為小寫或大寫,靈活調整。