数据如下 :
$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 回答
![?](http://img1.sycdn.imooc.com/545867790001599f02200220-100-100.jpg)
摇曳的蔷薇
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;
});
这样的结果就是你想要的,总体思路没毛病~
- 1 回答
- 0 关注
- 974 浏览
添加回答
举报
0/150
提交
取消