2014-03-24 134 views
0

我想取消設置對象中的某些內容。在對象中取消設置屬性

foreach($curdel as $key => $value) { 
if ($value == $deletedinfo[0]) { 
    print_r($key); 
    print_r($curdel); 
    unset($curdel[$key]); 
} 
} 

正如預期的那樣,$key返回正確的值(0)和$curdel返回整個陣列。但試圖取消設置$curdel[$key]打破了一切。甚至試圖print_r($curdel[$key])打破了一切,我錯過了什麼?

我的對象看起來像這樣:

stdClass Object ([0] => IFSO14-03-21-14.csv [2] => EB_Bunny.jpg [3] => EB_White_Bear.jpg) 
+0

什麼意思 - 打破了一切?任何真正的錯誤消息? – vikingmaster

+0

打破一切?什麼是錯誤? – Kamehameha

+0

沒有錯誤,我嘗試後沒有任何呈現。 – jrabramson

回答

2

相反的:

unset($curdel[$key]); 

嘗試:

unset($curdel->$key); 

數組訪問/通過[],但對象和類的屬性修改通過的訪問 - >

+0

這傢伙,這個傢伙知道怎麼回事。 – jrabramson

2

可能解決這一問題是添加參考$value變量:

foreach($curdel as $key => &$value) { //Note & sign 
    if ($value == $deletedinfo[0]) { 
     print_r($key); 
     print_r($curdel); 
     unset($curdel[$key]); 
    } 
} 

&$value裝置以一個實際的數組元素

基準還回答基於此(類似)的示例:Unset an array element inside a foreach loop

更新基於在輸入(stdClass的,而不是陣列)

:只投$curdel到陣列的第一:在對象

$curdel = (array) $curdel ; 

數字索引是有點兒無效,並且只能通過以下方式訪問特殊語法如:

這是一個非常糟糕的做法。

+0

該foreach,如果似乎沒有問題,因爲這兩個print_r正在關閉。 – jrabramson

+0

說真的,只是解釋你有什麼輸入和你需要得到什麼樣的最終結果。發佈更多可能導致問題的代碼,我們將幫助您。 '打破一切'與'ERROR_NOT_FOUND'相同 – vikingmaster

+0

我認爲這是一個很好的答案,根據當時可用的信息:'object!= object array'! – halfer