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

Son*_*tte 9 php arrays recursion

我有以下数组,我需要递归循环并删除任何具有键'字段'的子数组.我已经尝试了阵列过滤器,但我无法使其中任何一个工作.

$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')
                )
            )
        )
    )    
);
Run Code Online (Sandbox Code Playgroud)

这就是我需要它的结果如下:

$myarray = array(
    'Item' => array(
        'Part' => array(
        )
    ),
    'Owner' => array(
        'Company' => array(
            'Locations' => array(
                'State' => array(
                )
            )
        )
    )    
);
Run Code Online (Sandbox Code Playgroud)

sou*_*rge 30

如果要以递归方式操作,则需要将数组作为引用传递,否则会进行大量不必要的复制:

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


use*_*291 5

你想要array_walk

function remove_key(&$a) {
   if(is_array($a)) {
        unset($a['fields']);
        array_walk($a, __FUNCTION__);
   }
}
remove_key($myarray);
Run Code Online (Sandbox Code Playgroud)

  • 如果你取消设置"[此函数的行为未定义且不可预测](http://php.net/manual/en/function.array-walk.php)"的元素,则array_walk不会声明吗? (3认同)