2012-05-13 80 views
0

我有以下陣列結構:刪除數組,其中值等於

0 => 
    array 
     'all_sessions_available' => boolean true 
     'all_sessions_unavailable' => boolean false 
    .... 
    22 => 
    array 
     'all_sessions_available' => boolean false 
     'all_sessions_unavailable' => boolean true 

我試圖刪除完整數組元素如果all_sessions_unavailable =真

我有以下代碼:

for ($i = 0; $i <= count($processData); $i++) { 
    if ($processData[$i]['all_sessions_unavailable'] === true) { 
     unset($processData[$i]); 
    } 
} 

但是它會刪除所有,但最後一個數組(22在這種情況下,這恰好是整個陣列中的最後一個數組是否是有不同之處)

有什麼我做錯了嗎?

+0

不是100%肯定在這個,但嘗試迭代從另一邊......我認爲它正在改變索引,因爲它取消設置,所以而不是「for($ i = count($ processData); $ i> = 0; $ i--)「 – hackartist

+0

這工作的一種享受,使它成爲一個答案:) – lethalMango

+0

當然,剛剛 – hackartist

回答

1

我認爲這是改變的指標,因爲它會取消這樣反而做

for($i=count($processData);$i>=0;$i--) 
1

爲PHP 5.3+的另一種方法:

$processData = array_filter($processData, 
          function ($i) { return !$i['all_sessions_unavailable']; }); 
1
foreach($processData as $index=>$session){ 
    if($session['all_sessions_unavailable']){ 
     unset($processData[$index]); 
    } 
} 

你爲什麼不只是使用foreach() ,它可能是PHP中最好的功能之一...

另外,除非all_sessions_unavailable可能包含布爾值以外的值,您不必將其與精確的true相匹配。