php数组\过滤器递归

falq053o  于 2021-10-10  发布在  Java
关注(0)|答案(1)|浏览(349)

请帮我过滤数组
我有一个数组:

$arr=[
    'test'  =>  [
        'access'    => 111,
        'aa'        => [
            'access'=> 222,
            'bb'    => 333
            ],
        ],
    'access'    =>  444,
    'value'     =>  555
    ];

我想要

$arr=[
    'test'  =>  [
        'access'    => 111,
        'aa'        => [
            'access'=> 222,
            ],
        ],
    'access'    =>  444,
    ];

我愿意

function array_filter_recursive($input)
{
    foreach ($input as &$value) {
        if (is_array($value)) {
            $value = array_filter_recursive($value);
        }
    }
    return array_filter($input,function ($key){
            return $key == 'access';
        },ARRAY_FILTER_USE_KEY);
}

var_dump(array_filter_recursive($arr));

只返回1个项目
如果我像这样改变函数 return $key != 'access'; 它返回数组而不返回 key==access 但如果$key=='access',则不起作用

mdfafbf1

mdfafbf11#

您只想删除未命名的密钥 access 并且该值不是嵌套数组。这样,就可以保留任何中间数组。
你不能用 array_filter() ,因为它只接收值,而不接收键。所以,在你的生活中这样做 foreach

function array_filter_recursive($input)
{
    foreach ($input as $key => &$value) {
        if (is_array($value)) {
            $value = array_filter_recursive($value);
            if (empty($value)) {
                unset($input[$key]));
            }
        } elseif ($key != 'access') {
            unset($input[$key]);
        }
    }
    return $input;
}

相关问题