为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

PHP
慕侠2389804 2019-03-16 21:43:19
数据如下 : $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', ] ], ], 请问这个该如何写呢?
查看完整描述

1 回答

?
摇曳的蔷薇

TA贡献1793条经验 获得超6个赞

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

$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;
});

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

查看完整回答
反对 回复 2019-03-18
  • 1 回答
  • 0 关注
  • 957 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信