PHP — как использовать рекурсию

В данном примере мы выведем дерево элементов из массива. Будем использовать рекурсивное обращение функции к самой себе.

PHP пример рекурсии

Данная задача встречается довольно часто, особенно, при построении навигационных цепочек, меню, различных sitemaps и т.п.

Ита, для начала мы запишем простой массив с несколькими уровнями вложенности:

Видим что test0 и test3 не являются массивами, а вот в элементе массива test1 находится ассоциативный массив.

Значит, нам нужно проверять, является ли значение ключа массива, массивом 🙂
Надеюсь вы еще не запутались. Создадим функцию, и в ней вользопльемся is_array а после этого уже вызовем ее для нашей переменной $tree.

Собственно, сама функция:

Как видим, в параметр функции мы передаем массив;
затем создаем пустую строку;
затем проходим циклом по элементам массива и через сокращенную запись if ? else :  (он же, тернарный оператор) — проверяем является ли ключ массивом (ключ это $twig) и если является — запускаем функцию.

Ну и конечно в ответе функции мы просим вернуть через return полученное «дерево» элементов.

Полный код выглядит вот так:

А результат выполнения, так:

  • test0
  • test1
    • test1.1
    • test1.2
      • test1.2.1
  • test3

Вот и всё, надеюсь вы всё поняли, и с рекурсией больше вопросов не будет 🙂

автор: Dmitriy

Занимаюсь веб-разработкой с 2011 года. Посмотреть некоторые из моих работ, а также узнать чуть больше обо мне, вы можете на forwww.com/dmitriy/.

Какие услуги предоставляю:
- Создание сайтов, шаблонов и компонентов на 1С-Битрикс;
- Разработка функционала с нуля и доработка кода на уже созданных проектах;
- Адаптивная вёрстка макетов и натяжка на Битрикс;
- Парсинг файлов и выгрузка на сайт (форматы - CSV, XML, XLSX, JSON)
- Интеграции со сторонними сервисами по API;
- Многоязычные версии и многое другое.

Если у вас остались вопросы, свяжитесь со мной любым удобным для вас способом или оставьте комментарий внизу.
E-mail: dmitriyribka@gmail.com
Skype: cinemacreaterus

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *