Как сделать рекурсию по условию в цикле 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 шт):

Автор решения: Vladimir Gonchar

Вы можете по рекурсии заинклюдить шаблон, тогда всё будет работать как Вы хотите. Соответственно, всё выведется списком, а верстку уже вешайте какую нужно.

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
→ Ссылка