0

说我有以下内容:

Array(
[0] => Array
    (
        [id] => 1
        [item] => first item
    )

[1] => Array
    (
        [id] => 3
        [item] => second item
    )

[2] => Array
    (
        [id] => 5
        [item] => third item
    )

)

我想用id= 5 删除项目。我知道我可以遍历数组并取消设置,但我希望有一个更直接/更有效的解决方案。

4

4 回答 4

3

如果你不能让 IDs 成为外部数组的键(那么你可以简单地使用unset($arr[5]);),循环数组确实是 dg.

foreach($arr as $key => $value) {
    if($value['id'] === 5) {
        unset($arr[$key]);
        break;
    }
}

另一种选择是使用array_filter- 但效率较低,因为它创建了一个新数组:

$arr = array_filter($arr, function($value) {
    return $value['id'] !== 5;
});
于 2012-11-01T19:34:08.530 回答
1

为什么不使用设置为 ID 的键创建数组?例如:

Array(
[1] => Array
    (
        [id] => 1
        [item] => first item
    )

[3] => Array
    (
        [id] => 3
        [item] => second item
    )

[5] => Array
    (
        [id] => 5
        [item] => third item
    )

)

然后你可以写:

<?php    
unset($array[5]); // Delete ID5
?>
于 2012-11-01T19:35:18.100 回答
1

对于多级嵌套数组

<?php
    function remove_array_by_key($key,$nestedArray){
        foreach($nestedArray as $k=>$v){
            if(is_array($v)){
                remove_array_by_key($key,$v);
            } elseif($k==$key){
                unset($nesterArray[$k]);
            }
        }
        return $nestedArrat;
    }
?>
于 2012-11-01T19:40:59.380 回答
0

最有效的方法是拥有 2 个数组。

ID => Index
Index => Object (your current array)

在您的 ID => 索引帮助器数组中搜索 ID ,该值将是您的主数组的索引,然后将它们都取消设置。

于 2012-11-01T19:39:38.623 回答