在PHP 中, array_change_key_case()是一個非常實用的函數,它可以快速將數組的鍵名轉為全小寫或全大寫,常用於統一數據格式,特別是在處理外部數據(如API 返回值)時。然而,這個函數能否直接用於stdClass對像上呢?本文將帶你一起探索這個問題。
array_change_key_case()接受一個數組,並將其所有鍵名轉換為小寫或大寫:
$data = [
"Name" => "Alice",
"AGE" => 25
];
$lowercase = array_change_key_case($data, CASE_LOWER);
print_r($lowercase);
輸出結果:
Array
(
[name] => Alice
[age] => 25
)
在PHP 中, stdClass是最常用的匿名對像類型。很多時候,比如通過json_decode()解碼JSON 字符串時,如果不傳第二個參數true ,就會默認返回stdClass對象。
$json = '{"Name": "Alice", "AGE": 25}';
$obj = json_decode($json);
print_r($obj);
輸出結果類似於:
stdClass Object
(
[Name] => Alice
[AGE] => 25
)
答案是:不能直接使用。 array_change_key_case()只接受數組作為輸入參數。如果你嘗試把stdClass對像傳進去,會得到一個警告或錯誤。
示例:
$json = '{"Name": "Alice", "AGE": 25}';
$obj = json_decode($json);
$result = array_change_key_case($obj, CASE_LOWER);
輸出:
Warning: array_change_key_case() expects parameter 1 to be array, object given
所以我們需要先將對象轉為數組,再使用該函數。
可以使用類型轉換或get_object_vars()將stdClass轉換為數組:
$json = '{"Name": "Alice", "AGE": 25}';
$obj = json_decode($json);
// 方法 1:類型轉換
$arr = (array) $obj;
// 方法 2:get_object_vars()
$arr2 = get_object_vars($obj);
// 使用 array_change_key_case
$lowercase = array_change_key_case($arr, CASE_LOWER);
print_r($lowercase);
輸出:
Array
(
[name] => Alice
[age] => 25
)
如果你需要將最終結果再轉換為對象,也可以這樣做:
$lower_obj = (object) $lowercase;
print_r($lower_obj);
結果:
stdClass Object
(
[name] => Alice
[age] => 25
)
假設你從一個接口(例如https://api.m66.net/user/info )獲取了用戶數據:
$response = file_get_contents('https://api.m66.net/user/info');
$data = json_decode($response); // 默認為 stdClass
$normalized = array_change_key_case((array) $data, CASE_LOWER);
print_r($normalized);
這樣,無論接口返回的字段是大寫、小寫還是混合的,你都能統一處理成你需要的格式。
array_change_key_case()只能用於數組;
stdClass必須先轉換成數組;
轉換後再調用該函數是推薦做法;
處理完後如有需要,也可以再轉回對象。
這個小技巧在處理JSON 數據時非常常用,尤其是與外部接口對接時,能幫你避免很多由於字段大小寫不一致帶來的bug。