鍍金池/ 問(wèn)答/PHP/ 請(qǐng)教一下,用laravel collect 如何過(guò)濾掉一組數(shù)組 ?

請(qǐng)教一下,用laravel collect 如何過(guò)濾掉一組數(shù)組 ?

數(shù)據(jù)如下 :

$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'];

目前我這樣寫(xiě),是有問(wèn)題的,與期望的結(jié)果不符,

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

dump($collect->toArray());

打印出來(lái)的結(jié)果:

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

期望的結(jié)果應(yīng)該為這樣:

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

請(qǐng)問(wèn)這個(gè)該如何寫(xiě)呢?

回答
編輯回答
咕嚕嚕

兄弟,有個(gè)地方不對(duì),你第二次篩選出來(lái)的結(jié)果應(yīng)該賦值回去才對(duì)~
你的代碼:

$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(); //此處要賦值回去,而且要把結(jié)果轉(zhuǎn)為數(shù)組
 return $value;
});

這樣的結(jié)果就是你想要的,總體思路沒(méi)毛病~

2018年6月16日 04:46