Рекурсивная функция для вывода элементов (двух, трех, может больше)мерного массива циклом foreach
Есть массив в качестве примера (Вообще, массив может быть с n-уровнем вложенности, элементы которого могут иметь произвольный тип данных):
$menu = [
[
'label' => 'More frameworks',
'items' => [
['label' => 'Laravel', 'url' => 'https://laravel.com'],
['label' => 'Slim', 'url' => 'http://www.slimframework.com/'],
],
],
[
'label' => 'Yii framework',
'url' => 'https://yiiframework.ru'
],
[
'label' => 'Symfony',
'url' => 'https://symfony',
],
];
Я пытаюсь: создать функцию, которая будет принимать в качестве единственного аргумента: ПРОИЗВОЛЬНЫЙ МАССИВ. А на выходе функция будет выдавать многоуровневый список ul.
Мой код:
function arrOutput($arrInput) {
foreach ($arrInput as $value) {
if (gettype($value) == "array") {//если элемент массива имеет тип: array
return(arrOutput($value));//VOT ONO тут функция запускает сама себя и в качестве аргумента принимает текущий элемент массива, тоесть в качестве аргумента принимает массив.
} else if (gettype($value) == "string") {//если элемент массива имеет тип: string
echo "$value <br />";
}
}
}
arrOutput($menu);
Результат действия функции:
More frameworks
Laravel
https://laravel.com
Я смотрю на строчку: VOT ONO.И вроде бы почти всё работает, но ... Т.е. попался в массиве ЭЛЕМЕНТ, который сам является массивом, ок, условие работает: функция запускает сама себя, но вот после этого ЭЛЕМЕНТа почему то цикл перестает перебирать следующие елементы. Просьба сильно не пинать, не вразумею, почему же дальше цикл foreach не отрабатывает.
Ответы (1 шт):
Что делает return? Выходит из функции. То есть прерывает ее выполнение.
//return(arrOutput($value));
arrOutput($value);