當前位置: 首頁> 最新文章列表> array_change_key_case() 是否適用於對象(stdClass)?

array_change_key_case() 是否適用於對象(stdClass)?

M66 2025-04-28

在PHP 中, array_change_key_case()是一個非常實用的函數,它可以快速將數組的鍵名轉為全小寫或全大寫,常用於統一數據格式,特別是在處理外部數據(如API 返回值)時。然而,這個函數能否直接用於stdClass對像上呢?本文將帶你一起探索這個問題。

array_change_key_case() 是什麼?

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
)

stdClass 是什麼?

在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 嗎?

答案是:不能直接使用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。