Cannot use object of type stdClass as array

2009/03/16
~ 阿亮 ~

最近用 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’] 的意思了。

好久沒玩 PHP 的類別,熊熊地給它忘記  

這裡很容易被弄迷糊。



站內搜尋



本站其他服務

本站其他軟體



  • 油價快訊App (OilPrices)

    依據油價及匯率,估算台灣下週油價,另外提供三週、一年以及三年的歷史變化,以及週末下午推播通知最新油價預估或公告。


  • 標案快訊

    讓你可以輕鬆追蹤含有您想要關注關鍵詞的任何採購標案,只要有最新的資訊,「標案快訊」即會推播通知給你.


  • 下一班公車(nextBus)

    這個 app 只要開啟後,就根據定位幫你過濾出附近站牌的時刻表,以及提供相關公車預計到站的時間,方便您在很快時間內確定要坐的哪一班公車


  • 照片去背(PhotoEraser)

    一款方便移除背景的工具,產生透明背景圖可以存回原本相簿,也可分享到其他 App 使用.


  • 國道一路通(FreeWay)

    打開定位即實際地圖上繪製所在地中心附近的車況圖,可縮放地圖,不再是小小的縮小圖,快速了解高速公路的路況。


  • 股海快訊 (iNews123)

    提供特定個股新聞更新推播、股價警示推播、新聞社群分享以及每日個股收盤價等功能的股票App/股市App.