请教一下,用laravel collect 如何过滤掉一组数组 ?

数据如下 :

$arr = [
    [
        'name' => 'Home',
        'rule' => 'home',
        'children' => [
            [
                'name' => 'index',
                'rule' => 'index',
            ],
            [
                'name' => 'show',
                'rule' => 'show',
            ]
        ],
    ],
    [
        'name' => 'File',
        'rule' => 'file',
        'children' => [
            [
                'name' => 'add',
                'rule' => 'add',
            ],
            [
                'name' => 'edit',
                'rule' => 'edit',
            ]
        ],
    ],
];

$rule = ['home', 'index', 'file', 'edit'];

目前我这样写,是有问题的,与期望的结果不符,

$collect = collect($arr)
    ->whereInStrict('rule', $rule)
    ->map(function ($value) use ($rule) {
       return collect($value['children'])->whereInStrict('rule', $rule);
    });

dump($collect->toArray());

打印出来的结果:

array:2 [▼
  0 => array:1 [▼
    0 => array:2 [▼
      "name" => "index"
      "rule" => "index"
    ]
  ]
  1 => array:1 [▼
    1 => array:2 [▼
      "name" => "edit"
      "rule" => "edit"
    ]
  ]
]

期望的结果应该为这样:

[
    'name' => 'Home',
    'rule' => 'home',
    'children' => [
        [
            'name' => 'index',
            'rule' => 'index',
        ]
    ],
    ],
    [
    'name' => 'File',
    'rule' => 'file',
    'children' => [
        [
            'name' => 'edit',
            'rule' => 'edit',
        ]
    ],
],

请问这个该如何写呢?

阅读 4.4k
1 个回答

兄弟,有个地方不对,你第二次筛选出来的结果应该赋值回去才对~
你的代码:

$collect = collect($arr)
->whereInStrict('rule', $rule)
->map(function ($value) use ($rule) {
   return collect($value['children'])->whereInStrict('rule', $rule);
});

修改:

$collect = collect($arr)
    ->whereInStrict('rule', $rule)
    ->map(function ($value) use ($rule) {
      $value['children'] = collect($value['children'])->whereInStrict('rule', $rule)
      ->toArray(); //此处要赋值回去,而且要把结果转为数组
 return $value;
});

这样的结果就是你想要的,总体思路没毛病~

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题