2012-05-13 59 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相匹配。