当前位置: 首页 > 面试题库 >

PHP如果匹配则递归取消设置数组键

怀刚毅
2023-03-14
问题内容

我有以下数组,我需要递归遍历并删除所有具有键“ fields”的子数组。我已经尝试过数组过滤器,但是我很难让它工作。

$myarray = array(
    'Item' => array(
        'fields' => array('id', 'name'),
        'Part' => array(
            'fields' => array('part_number', 'part_name')
        )
    ),
    'Owner' => array(
        'fields' => array('id', 'name', 'active'),
        'Company' => array(
            'fields' => array('id', 'name',),
            'Locations' => array(
                'fields' => array('id', 'name', 'address', 'zip'),
                'State' => array(
                    'fields' => array('id', 'name')
                )
            )
        )
    )    
);

这就是我需要的结果看起来像这样:

$myarray = array(
    'Item' => array(
        'Part' => array(
        )
    ),
    'Owner' => array(
        'Company' => array(
            'Locations' => array(
                'State' => array(
                )
            )
        )
    )    
);

问题答案:

如果要递归操作,则需要将该数组作为参考传递,否则,您会进行许多不必要的复制:

function recursive_unset(&$array, $unwanted_key) {
    unset($array[$unwanted_key]);
    foreach ($array as &$value) {
        if (is_array($value)) {
            recursive_unset($value, $unwanted_key);
        }
    }
}


 类似资料:
  • 问题内容: 如果要花费10秒钟以上的时间才能取消操作? 我正在使用巨大的正则表达式来匹配特定的文本,有时可能有用,有时可能会失败… 正则表达式: 工作示例:https://regex101.com/r/kU6rS5/1 所以..如果要花费10秒以上,我想取消操作。可能吗?我找不到与沙发有关的任何东西 谢谢。 问题答案: 您可以生成一个进行正则表达式匹配的子进程,并在10秒钟内未完成将其杀死。可能有

  • 我有一个这样的字符串: 我需要处理这样上面的代码就变成了 我需要一直这样做直到我 我的模式字符串将匹配整个内容。不是。 Java代码:

  • 问题内容: 该字符串可以类似于以下之一: 我想匹配不限数量的“ a(x,y)”。如何使用Regex做到这一点?这是我所拥有的: 它仅匹配“ a(x,y)”的两个递归。 问题答案: Java的标准正则表达式库不支持递归,因此您无法将此类通用嵌套结构与之匹配。 但是在确实支持递归的版本(Perl,PCRE,.NET等)中,您可以使用以下表达式:

  • 字符串可以类似于以下内容之一: 我想匹配无限数量的“a(x,y)”。我如何使用正则表达式来实现这一点?以下是我所拥有的: 它只匹配"a(x, y)"的两个递归。

  • 我试图创建一个正则表达式模式来匹配每个(内容*),但是该模式可以在另一个((内容)(内容))中找到。我尝试了,但这返回了外部的。 例如:字符串应返回: 第一个匹配: 第二个匹配: 编辑: 我试过:但在?R(未知标志)附近出现错误

  • 当我控制台下面的两个数组是如何看 在两个数组中,349都是匹配的,匹配后应返回1。下面是我如何尝试的 它不匹配任何人都能给出解决方案!!!!