2013-02-26 151 views
1

我從Web服務的查詢中得到一個結果,我想從中獲取一些值。它的工作原理,但我有PHP的通知問題,所以我可能做錯了什麼。如何正確訪問數組對象

這是$items變量的內容:

stdClass Object 
(
    [response] => stdClass Object 
     (
      [0] => stdClass Object 
       (
        [id] => 275 
        [corpid] => 16107 
        [name] => default 
        [description] => 
        [status] => ok 
        [nbSteps] => 7 
       ) 

      [defaultItem] => 275 
     ) 

    [error] => 
    [status] => success 
) 

所以,我想是這樣的:

foreach ($items->response AS $key => $item) { 
    if ($item->name == 'default'){ // Line 106 
     $Id = $item->id; 
    } 
} 

它的工作原理,$Id等於275,但PHP返回一個通知:

Notice: Trying to get property of non-object in /home/web/dev/webservice-form.php on line 106 

任何幫助將不勝感激。

編輯:這是$項變量(從foreach循環所)的內容:

stdClass Object 
(
    [id] => 275 
    [corpid] => 16107 
    [name] => default 
    [description] => 
    [status] => ok 
    [nbSteps] => 7 
) 

275 

請注意,「275」是結果的一部分。

+2

哪一行是106,這是通知被引發的地方? – ncremins 2013-02-26 13:10:05

+0

調試的最佳方式嘗試回顯項目和item-> id。我認爲你可以轉換爲數組並使用值。 – Sarang 2013-02-26 13:10:33

+2

''defaultItem「 - > name'。 'defaultItem'不是一個對象。 – dfsq 2013-02-26 13:10:48

回答

2

問題是您的內部對象中的defaultItem條目。你的循環會在某些時候達到此目的,並嘗試訪問name,這不存在,因爲沒有對象。

應該可以通過is_object()輕鬆解決。

+0

謝謝,它的工作原理! – roastedtoast 2013-02-26 13:26:54

2

你有混合類型,一個是對象,一個int值,嘗試檢查了每個產品:

foreach ($items->response AS $key => $item) { 

    if(is_object($item) && $item->name == 'default'){ // Line 106 
     $Id = $item->id; 
    } 
    else { 
     $Id = $item; // assume it's scalar value 
    } 
} 

顯然,這將取決於你能想到什麼其他的檢查,你需要些什麼在那裏添加..