Как сделать рекурсию по условию в цикле foreach?
Всем привет, вопрос конечно простецкий, но не могу разобраться))
У меня есть массив, он всегда различной вложенности (категории).
{
"id":9,
"name":"futbolki-i-polo",
"all_children_categories":[
{
"id":4,
"name":"futbolki",
"all_children_categories":[]
},
{
"id":5,
"name":"polo",
"all_children_categories":[]
}
]
},
{
"id":10,
"category_id":2012,
"name":"shtany-i-bryuki",
"all_children_categories":[]
}
]
Таким образом, где-то all_children_categories имеет пустой массив, а где-то с данными. Мне нужно получить все значения "name" из массива.
Пытаюсь вывести на blade Laravel:
@foreach ($category->allChildrenCategories as $item)
{{ $item->name }}"
@endforeach
Но таким образом я получаю только первые дочерние элементы. Полагаю, что нужно добавить условие if с проверкой на пустоту "all_children_categories" и, если не пустой, то пройтись по нему и снова проверить "all_children_categories" и т.д. Вложенность не обязательно равна 2, она на самом деле больше.
Помогите, плез)
Результат должен быть простой массив типа:
[
"futbolki-i-polo",
"futbolki",
"polo",
]
Ответы (1 шт):
Вы можете по рекурсии заинклюдить шаблон, тогда всё будет работать как Вы хотите. Соответственно, всё выведется списком, а верстку уже вешайте какую нужно.
categories.blade.php:
<ul>
@foreach($categories as $category)
<li>{{ $category->name }}</li>
@if(!empty($category->all_children_categories))
<ul>
@foreach ($category->all_children_categories as $childNode)
@include('categories.node', ['child_node' => $childNode])
@endforeach
</ul>
@endif
@endforeach
</ul>
categories.node.blade.php:
<li>{{ $child_node->title }}</li>
@if(!empty($child_node->all_children_categories))
<ul>
@foreach ($child_node->all_children_categories as $childNode)
@include('categories.node', ['child_node' => $childNode])
@endforeach
</ul>
@endif