Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/229.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 删除嵌套数组元素的最有效方法_Php_Arrays_Unset - Fatal编程技术网

Php 删除嵌套数组元素的最有效方法

Php 删除嵌套数组元素的最有效方法,php,arrays,unset,Php,Arrays,Unset,假设我有以下几点: Array( [0] => Array ( [id] => 1 [item] => first item ) [1] => Array ( [id] => 3 [item] => second item ) [2] => Array ( [id] => 5 [item] => thir

假设我有以下几点:

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

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

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

)

我想删除id为
5的项目。我知道我可以通过数组和unset进行循环,但我希望有一个更直接/有效的解决方案。

如果您不能将ID作为外部数组的键(那么您可以简单地使用
unset($arr[5]);
),在数组上循环确实是实现dg的方法

foreach($arr as $key => $value) {
    if($value['id'] === 5) {
        unset($arr[$key]);
        break;
    }
}
另一个选项是使用-尽管效率较低,因为它会创建一个新数组:

$arr = array_filter($arr, function($value) {
    return $value['id'] !== 5;
});

如果您不能将id作为外部数组的键(那么您可以简单地使用
unset($arr[5]);
),那么在数组上循环确实是实现dg的方法

foreach($arr as $key => $value) {
    if($value['id'] === 5) {
        unset($arr[$key]);
        break;
    }
}
另一个选项是使用-尽管效率较低,因为它会创建一个新数组:

$arr = array_filter($arr, function($value) {
    return $value['id'] !== 5;
});

为什么不使用设置为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
?>

为什么不使用设置为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
?>

最有效的方法是使用两个阵列

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

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

最有效的方法是使用两个数组

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

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

对于多级嵌套数组

<?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;
    }
?>

用于多级嵌套数组

<?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;
    }
?>


我处理的是一些旧的JSON,无法对其进行操作,除非我能以某种方式转换数组……嗯,我认为如果你无法操作,你可能是唯一的选择。我处理的是一些旧的JSON,无法对其进行操作,除非我能以某种方式转换数组…嗯,我想如果你不能操纵,你是唯一的选择,也许可以循环通过