【问题标题】:PHP array_filter RecursivePHP array_filter 递归
【发布时间】:2021-10-02 18:40:22
【问题描述】:

请帮我过滤数组

我有数组:

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

【问题讨论】:

  • 输入是第一个数组,想要的输出是第二个数组。

标签: php recursion array-filter


【解决方案1】:

您只想删除未命名为 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;
}

【讨论】:

    猜你喜欢
    • 2011-10-11
    • 1970-01-01
    • 1970-01-01
    • 2011-07-25
    • 1970-01-01
    • 2017-02-01
    • 1970-01-01
    • 1970-01-01
    • 2019-03-03
    相关资源
    最近更新 更多