2011-10-22 66 views
0

我遇到了一個我似乎無法找到解決方案的問題。在foreach循環在陣列上使用str_replace

foreach($results->result as $item) 

以下代碼

$item->title = str_replace(" - Home", "", $item->title); 

總是引發錯誤

捕獲的致命錯誤:類stdClass的的對象不能被轉換成字符串

我以爲str_replace能夠處理數組?爲了實現這個目標,我需要改變什麼?

感謝您的任何建議!

+2

做的var_dump($本期特價貨品>標題); – dynamic

+0

它可以處理數組,但在你的情況下'$ item-> title'是一個對象。 – deviousdodo

+0

謝謝大家的驚人快速幫助! :) – rafleo

回答

4

這不是一個數組,它是一個對象,,因爲錯誤說 ...你有沒有用json_decode()得到它?

然而,解決方法很簡單 - 將它轉換爲一個數組:

$item->title = str_replace(" - Home", "", (array) $item->title); 

關於這一點的另一個問題是,如果你是想修改$results->result保存的數據,而不是僅僅是它的複製品,你需要你的foreach是:

foreach($results->result as &$item) 

...並獲得項目作爲參考,而不是副本...

+0

非常感謝您的詳細解答! – rafleo

2

做一個var_dump$item->title,因爲它不是一個數組,它是一個對象。 str_replace只能處理實際的數組和字符串。如果你希望這是一個數組,那麼你可能在其他地方有一些問題,我會研究這個。

如果你只是在尋找一個補丁,你可能能夠逃脫鑄造它。如果一切工作,我會做這個,因爲它確實具有最少的副作用:

// convert it to an array before passing it through str_replace 
// (array) $item->title 
// then convert it back to its original form by casting the result back 
// (object) str_replace 
$item->title = (object) str_replace(" - Home", "", (array) $item->title); 

如果title必須是一個數組,你可以逃脫不(object),但我認爲這將是一個更好的想法來追蹤哪裏設置了title,並具有正確的值。


順便說一句—如果你在使用$item->title外循環的規劃,還需要確保您使用的參考,因此,該項目本身被更新:

foreach($results->result as &$item) 
{ 
    $item->title = (object) str_replace(" - Home", "", (array) $item->title); 
} 
2

$item->title似乎成爲stdClass類型的對象,而不是字符串。請執行var_dump($item->title)以查看對象的外觀。

此外,您環路不會做你所期望的,在循環結束後,在$results->result所有對象仍會有相同的值(使用foreach($results->result as &$item)(按引用傳遞))