在foreach循环中取消设置数组元素

Ric*_*nop 19 php

所以这是我的代码:

<?php

$arr = array(array(2 => 5),
             array(3 => 4),
             array(7 => 10));

foreach ($arr as $v) {
    $k = key($v);
    if ($k > 5) {
        // unset this element from $arr array
    }
}

print_r($arr);

// now I would like to get the array without array(7 => 10) member
Run Code Online (Sandbox Code Playgroud)

如您所见,我从一个单键=>值数组的数组开始,我循环遍历此数组并获取当前元素的键(这是一个单项数组).

我需要用高于5的键取消数组的元素,我怎么能这样做?我可能还需要删除值小于50的元素或任何其他条件.基本上我需要能够获得当前数组项的键,它本身就是一个带有单个项的数组.

sas*_*asa 46

foreach($arr as $k => $v) {
    if(key($v) > 5) {
        unset($arr[$k]);
    }
}
Run Code Online (Sandbox Code Playgroud)

  • @Haider 你只是误解了 `key($v)` 的用途。它获取子数组的键,即`$v`,而不是迭代数组的任何键。对于第一个元素,`$k == 0`、`$v == array(2 =&gt; 5)`和`key($v) == 2`。 (2认同)

Ale*_*nov 15

在PHP安全,而使用foreach循环在它迭代从数组中删除元素:

foreach ($arr as $key => $value) {
    if (key($value) > 5) {
        unset($arr[$key]);
    }
}
Run Code Online (Sandbox Code Playgroud)

  • 请注意,这实际上并不是OP所希望的(但你的观点大多是正确的 - 在`foreach`循环的上下文中这样做是安全的;其他形式的迭代并不总是添加/删除安全). (2认同)