# Рекурсия и многомерные структуры в PHP

Дан массив многомерный произвольного уровня вложенности, например, такой:

`<?php $arr = [ 1, [ 2, 7, 8 ], [ 3, 4, [5, [6, 7]], ] ]; ?>`

Как вы видите, данный массив имеет сложную структуру, причем предполагается, что эта структура может быть произвольной и уровни вложенности могут быть сколь угодно глубоко.

Пусть мы хотим вывести на экран все примитивные (то есть не массивы) элементы нашего массива. В этом случае для перебора такого массива у нас просто не получится использовать циклы, так как массив имеет неправильную структуру и неизвестный уровень вложенности.

Зато для перебора такого массива очень удобно будет использовать рекурсию.

Для начала сделаем функцию, в которую параметром будем передавать наш массив, а в функции сделаем цикл для перебора нашего массива:

`<?php function func($arr) { foreach ($arr as $elem) { echo $elem; } } func([1, [2, 7, 8], [3, 4, [5, [6, 7]]]]); ?>`

Сделанный нами цикл будет перебирать только элементы основного массива. То есть вначале он выведет `1`, потом `[2, 7, 8]`, а потом `[3, 4, [5, [6, 7]]`.

Давайте теперь будем разделять в цикле элементы-примитивы и элементы-массивы:

`<?php function func($arr) { foreach ($arr as $elem) { if (is_array($elem)) { // элемент - массив } else { // элемент - примитив echo $elem; } } } func([1, [2, 7, 8], [3, 4, [5, [6, 7]]]]); ?>`

А теперь сделаем так, чтобы если наш элемент - массив, функция вызывала сама себя, передавая параметром этот массив:

`<?php function func($arr) { foreach ($arr as $elem) { if (is_array($elem)) { func($elem); } else { echo $elem; } } } func([1, [2, 7, 8], [3, 4, [5, [6, 7]]]]); ?>`

Дан многомерный массив произвольного уровня вложенности, например, такой:

`<?php $arr = [1, 2, 3, [4, 5, [6, 7]], [8, [9, 10]]]; ?>`

С помощью рекурсии выведите все примитивные элементы этого массива на экран.

←→
↑