在PHP 中處理JSON 資料時,可能會遇到具有名為整數或無效屬性的物件變數名稱。這可能會導致使用標準點表示法存取這些屬性時遇到困難。
考慮以下範例,其中使用json_decode() 解碼JSON 物件:
$myVar = json_decode($data);
這可能會產生一個物件例如:
[highlighting] => stdClass Object ( [448364] => stdClass Object ( [Data] => Array ( [0] => Tax amount liability is ....... ) ) )
這可能會產生一個物件例如:
print $myVar->highlighting->448364->Data->0;
可能的解決方案
選項1:手動轉換
$highlighting = (array)$myVar->highlighting; $data = (array)$highlighting['448364']->Data; $value = $data['0'];
要存取屬性,您可以使用(array)$object 手動將物件轉換為數組。這允許您將數字屬性作為數組鍵存取:
選項2:大括號語法
echo $myVar->highlighting->{'448364'}->Data->0; // OK! echo $myVar->highlighting->{'123'}->Data->0; // Error!
另一種方法是使用大括號語法存取該屬性。但是,這僅在屬性名稱不完全是數字時才有效:
選項3:遞歸轉換函數
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'];
更強大的方法是建立自訂遞歸地將物件轉換為陣列的函數:
選項4:使用JSON函數
$arr = json_decode(json_encode($myVar), true); $value = $arr['highlighting']['448364']['Data']['0'];
另一個選擇是使用內建JSON 函數遞歸地將物件轉換為陣列:
這種方法很方便,但需要資料採用UTF-8 編碼。以上是如何在 PHP 中存取具有數字或無效名稱的物件屬性?的詳細內容。更多資訊請關注PHP中文網其他相關文章!