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

我正在尝试删除完整的数组元素 if all_sessions_unavailable= true

我有以下代码:

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

但是,它会删除除最后一个数组之外的所有数组(22在这种情况下,如果有任何区别,它恰好是整个数组中的最后一个数组)

有什么我做错了吗?

4

3 回答 3

1

I think it is changing the indexes as it unsets so instead do

 for($i=count($processData);$i>=0;$i--)
于 2012-05-13T23:22:00.133 回答
1

An alternative approach for PHP 5.3+:

$processData = array_filter($processData,
                            function ($i) { return !$i['all_sessions_unavailable']; });
于 2012-05-13T23:24:57.137 回答
1
foreach($processData as $index=>$session){
    if($session['all_sessions_unavailable']){
        unset($processData[$index]);
    }
}

为什么不直接使用foreach(),它可能是 PHP 中最好的功能之一...

此外,除非all_sessions_unavailable可能包含布尔值以外的值,否则您不必将其与精确的true.

于 2012-05-13T23:25:36.247 回答