一尘不染

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

php

我有以下数组,我需要递归遍历并删除所有具有键“ 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(
                )
            )
        )
    )    
);

阅读 210

收藏
2020-05-29

共1个答案

一尘不染

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

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