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 的類別,熊熊地給它忘記  

這裡很容易被弄迷糊。



站內搜尋



本站其他服務

本站其他軟體



  • 台灣匯率快算

    提供全球 150 種以上貨幣即時換算,以及各種匯率歷史變化圖。


  • 批踢踢快訊 (pttNews)

    身為鄉民的您,是不是常常覺得現在的批踢踢 (PTT) 閱讀器,明明您就只要看幾個板,都幫您分類好,但不是您要的?甚至您只想關注某個人(或某件事)的消息,卻散布在不同東西,找出來很辛苦? 這個 App 可以解決您這些問題,快來用吧!


  • 條碼掃描器(QRCode)

    支援 QRCode and Barcodes、可連續快速掃描、自動對焦、可打開手電筒供掃描時使用


  • 下一班高鐵 (nextTHSR)

    這個 app 只要開啟後,就根據定位幫你過濾出最近高鐵站的時刻表,不用再按任何按鈕了,方便您在很快時間內確定要坐的哪一班高鐵


  • 臉書粉絲專頁搜尋 (FPSearch)

    不用登入臉書即可搜尋臉書粉絲專頁(臉書粉絲團)所公開的文章。您可以指定特定日期範圍之前的文章,也可設定搜尋粉絲專頁內包含特定關鍵詞的文章。


  • 下一台單車(NextBike)

    打開定位即搜尋附近二十點自行車站點,不塞滿全部站點資料到整個地圖上,所以畫面簡潔方便看清楚目前所在地,若需要搜尋地圖其他位置附近站點,再點擊地圖即可。