繁体   English   中英

PHP array_filter 递归

[英]PHP array_filter Recursive

请帮我过滤数组

我有数组:

$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' 则它不起作用

如果键不是命名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;
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM