首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >根据键从多维数组中删除元素

根据键从多维数组中删除元素
EN

Stack Overflow用户
提问于 2011-08-21 05:31:02
回答 4查看 8.6K关注 0票数 9

如何从给定了键的多维数组中删除元素?

我希望它是贪婪的,这样它就会删除数组中与我传入的键匹配的所有元素。到目前为止,我可以遍历多维数组,但不能取消设置所需的键,因为我没有对它的引用!

代码语言:javascript
运行
复制
function traverseArray($array, $keys)
{ 
    foreach($array as $key=>$value)
    { 
        if(is_array($value))
        { 
            traverseArray($value); 

        } else {

            if(in_array($key, $keys))
           {                    
                //unset(what goes here?) 

            }

        } 
    }

}
EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2011-08-21 05:43:10

下面的代码可以工作(并且没有使用弃用的东西),只是对其进行了测试:

代码语言:javascript
运行
复制
function traverseArray(&$array, $keys) { 
  foreach ($array as $key => &$value) { 
    if (is_array($value)) { 
      traverseArray($value, $keys); 
    } else {
      if (in_array($key, $keys)){
        unset($array[$key]);
      }
    } 
  }
}
票数 8
EN

Stack Overflow用户

发布于 2011-08-21 05:35:48

你可以使用按引用传递,像这样声明你的函数:

代码语言:javascript
运行
复制
function traverseArray(&$array, $keys)
{ 
    foreach($array as $key=>$value)
    { 
        if(is_array($value))
        { 
            traverseArray($value, $keys); 
        }else{
            if(in_array($key, $keys)){
                unset($array[$key]);
            }
        } 
    }
}

然后,您可以取消设置键,它也将从最初传递的值中消失,因为函数中的$array只是指向您传递的数组的指针,因此它会更新该数组。

代码语言:javascript
运行
复制
unset($array[$key]);

有关更多信息,请查看php documentation on passing by reference

票数 1
EN

Stack Overflow用户

发布于 2011-08-21 05:34:03

你可以做到的

代码语言:javascript
运行
复制
unset($array[$key]);

因为$array不会是原始数组的副本,只是对它的引用,所以任何修改都将有效。

此外,您的代码片段中还存在一个小错误:当您进行递归调用时,您忘记了传递$keys参数。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/7134824

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档