json_decode(Cannot use object of type stdClass as array)

來源:互聯網
上載者:User

最近用 php 的 array 處理下述的程式碼,

$author = 'Mary';
$test[$author] = array('message'=>'測試', 'time'=> 1237175074);
$test2 = json_decode(json_encode($test));
print_r($test2[$author]);

一直得到下述的錯誤訊息
Cannot use object of type stdClass as array

這個程式碼,只要第三行加個 true,就可以了。
$author = 'Mary';
$test[$author] = array('message'=>'測試', 'time'=> 1237175074);
$test2 = json_decode(json_encode($test), true);
print_r($test2[$author]);

這個表示 decode 成 assoc array 而非預設的 stdClass,

所謂的 stdClass 就是一般「類別」,在 PHP 下也可以 encode 成 json code.

比如,原本的程式,若做 print_r($test2) 會得到下述的結
stdClass Object
(
[Mary] => stdClass Object
(
[message] => 測試
[time] => 1237175074
)
)

這表示一個類別而且包含數值的資料,相當於下面的資料結構。
Class Object
{
Class Mary
(
message: 測試
time: 1237175074
)
}

弄成 stdClass 的方式,也不是不可以,若要取得 assoc 下的 $test2['Mary'],在類別只要
$test2->Mary


$test2->$author

即可,只是就不是很直覺是原來 $test2['Mary'] 的意思了。

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.