Стараемся решить эту проблему с помощью коллекций Laravel или помощников массивов наиболее эффективным способом.Кто-нибудь может помочь с этим?
$menu = [
["id"=>1],
["id"=>2],
["id"=>3,"children"=>[
["id"=>4]
]],
["id"=>5,"children"=>[
["id"=>6],
["id"=>7,"children"=>[
["id"=>8],
["id"=>9]
]]
]],
["id"=>10]
];
$pages = [
['id'=>1,'label'=>'About Us','url_path'=>'/about-us'],
['id'=>2,'label'=>'Meet the Team','url_path'=>'/meet-the-team'],
['id'=>3,'label'=>'Services','url_path'=>'/services'],
['id'=>4,'label'=>'Contact Us','url_path'=>'/contact-us'],
['id'=>5,'label'=>'Company Mission','url_path'=>'/company-mission'],
['id'=>6,'label'=>'History','url_path'=>'/history'],
...
...
];
Ключ ID из вложенного массива $ menu должен выполнить поиск в массиве $ pages на основе того же идентификатора, а затем объединить всю строку обратно в $ menu.
Моя функция:
$menu = collect($menu)->map(function($item) use($pages){
$page_item = collect($pages)->firstWhere('id',$item['id']);
if(array_has($item,'children')){
$page_item['children'] = ...
}
return $page_item;
})->toArray();
Как добавить данные массива из $ pages в «children» с рекурсивной итерацией?И есть ли лучший способ сделать эту функцию более эффективной?Я хочу использовать коллекции Laravel или помощники массивов для решения этой проблемы вместо использования цикла foreach и т. Д.
Ниже приведен ожидаемый результат:
$menu = [
["id"=>1,"label"=>"About Us","url_path"=>"/about-us"],
["id"=>2,"label"=>"Meet the Team","url_path"=>"/meet-the-team"],
["id"=>3,"label"=>"Services","url_path"=>"/services","children"=>[
["id"=>4,"label"=>"Contact Us","url_path"=>"/contact-us"]
]],
["id"=>5,"label"=>"Company Mission","url_path"=>"/company-mission","children"=>[
["id"=>6,"label"=>"History","url_path"=>"/history"],
["id"=>7, ...
...
];
Может кто-нибудь показать мне?Спасибо!