2012-01-21 158 views
1

我有一個foreach循環,我想取消設置從數組中的項,如果某些條件得到滿足,就像這樣:刪除項目在foreach循環在PHP

foreach ($array as $element) { 
    if (conditions) { 
     unset($element); 
    } 
} 

但該元素不後未設置那。我究竟做錯了什麼?我是不是引用了實際的元素或類似的東西?

+0

你是否在意索引是否仍然設置? '$ array [4] = NULL!==!isset($ array [4])' – Shad

+1

'unset'做了兩件不同的事情。如果你已經使用了'foreach($ array as&$ element)'(注意&符號),那麼你應該用null替換這個值,這是你可能會遇到的其他行爲:從數組中刪除項目完全沒有痕跡。 – bart

回答

8

簡單的解決方案,取消設置元素通過它的指數:

foreach ($array as $key => $element) { 
    if (conditions) { 
     unset($array[$key]); 
    } 
} 

只是你重置$element將無法​​正常工作,因爲這個變量是不是數組元素的引用,而是一個副本。因此,更改$element的值也不會更改該數組。

+0

謝謝,這解決了我的問題! – federicot

0

的替代方法,可以通過執行通過引用傳遞數組元素進入循環執行以下操作:

foreach($array as &$var) { 
    unset($var); 
} 

這是有用的,因爲隨後必須數組元素直接訪問更改或刪除作爲你希望不必構建新的數組或通過密鑰訪問。對$ var所做的任何更改都會影響$ array的內容。

+1

這隻會取消參考,而不是原始元素。 – alingex