首頁 > 後端開發 > php教程 > 如何使用「json_decode()」在 PHP 中存取具有無效或數字屬性名稱的物件?

如何使用「json_decode()」在 PHP 中存取具有無效或數字屬性名稱的物件?

Mary-Kate Olsen
發布: 2024-12-18 08:16:15
原創
759 人瀏覽過

How Can I Access Objects with Invalid or Numeric Property Names in PHP Using `json_decode()`?

使用PHP 存取具有無效或數字屬性名稱的物件

嘗試使用PHP 中的json_decode() 函數解析JSON 資料時,您解析可能會在存取名稱為整數的屬性時遇到困難,或無法遵守有效的變數命名約定。此行為源自於 PHP 在處理具有此類屬性的物件時的固有限制。

限制和怪癖

  1. 數字屬性名稱:
    嘗試直接存取具有數字名稱的屬性(沒有任何前面的$ 符號)將導致語法錯誤。
  2. 大括號語法:
    可以使用大括號語法存取名稱無效的屬性,但僅限於不完全由數字組成的名稱。
  3. 物件的起源:
    直接從陣列建立的物件仍然可以使用大括號存取數字屬性語法,即使它們在技術上無效。

解#1:手動型別轉換

手動將物件轉換為數組以陣列訪問無效的屬性名稱:

$a = array('123' => '123', '123foo' => '123foo');
$o = (object) $a;
$a = (array) $o;
echo $a['123']; // OK!
登入後複製

解#2:核選項

使用遞歸函數將物件轉換為陣列:

function recursive_cast_to_array($o) {
    $a = (array) $o;
    foreach ($a as &$value) {
        if (is_object($value)) {
            $value = recursive_cast_to_array($value);
        }
    }

    return $a;
}

$arr = recursive_cast_to_array($myVar);
$value = $arr['highlighting']['448364']['Data']['0'];
登入後複製

解#3:JSON函數

利用內建JSON 函數遞歸轉換為陣列:

$arr = json_decode(json_encode($myVar), true);
$value = $arr['highlighting']['448364']['Data']['0'];
登入後複製

在選擇最適合您要求的解決方案之前,請務必考慮每種解決方案的缺點。例如,解決方案 #2 和 #3 執行不必要的陣列轉換,而解決方案 #3 也要求字串屬性以 UTF-8 進行編碼。

以上是如何使用「json_decode()」在 PHP 中存取具有無效或數字屬性名稱的物件?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
作者最新文章
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板