Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/265.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_Object_Loops_Recursion - Fatal编程技术网

Php 是否根据子值从数组中删除数组?

Php 是否根据子值从数组中删除数组?,php,arrays,object,loops,recursion,Php,Arrays,Object,Loops,Recursion,我有一个数组 我已经在下面发布了基本结构, 递归可以是任何深度 无论如何,我要做的是,循环数组中的每个项,如果它是['item']->data('id')值等于$id,则删除树的该部分 但我不确定最有效的方法是什么 我想这可能行得通,但我是不是遗漏了什么 function removeKey($key, &$categories){ foreach($categories as $k => $category){ if($category['item']-&

我有一个数组

我已经在下面发布了基本结构, 递归可以是任何深度

无论如何,我要做的是,循环数组中的每个项,如果它是
['item']->data('id')
值等于
$id
,则删除树的该部分

但我不确定最有效的方法是什么

我想这可能行得通,但我是不是遗漏了什么

function removeKey($key, &$categories){
    foreach($categories as $k => $category){
        if($category['item']->data('id') == $key){
            unset($categories[$k]);
            return;
        }
        if(!empty($category['children']))
            removeKey($key, $category['children']);
    }
}

removeKey($id, $categories);


您可以在顶部数组上使用
array\u filter
,然后分析回调函数中的每个子数组。看看这个

function removeKey($key, &$categories){
    foreach($categories as $category){//y u were using $& 
        if($category['item']->data('id') == $key){
            unset($category);
            return;
        }
        if(!empty($category['children']))
            removeKey($key, $category['children']);
    }
}

removeKey($id, $categories);

您可以使用或遍历每个子项并取消设置所需的子项。

这是不正确的,因为数组是多维的,而不是一维的。
&$
是这样的,我可以在循环时编辑该项,否则它只是一个副本,而不是对原始项的引用,因此我无法取消设置它!我上面的代码可以工作,但是我将这个问题留一点时间,看看是否有人有更有效的方法!问题在于效率。这样更有效吗?
function removeKey($key, &$categories){
    foreach($categories as $category){//y u were using $& 
        if($category['item']->data('id') == $key){
            unset($category);
            return;
        }
        if(!empty($category['children']))
            removeKey($key, $category['children']);
    }
}

removeKey($id, $categories);