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

123
11 января 2021, 16:20

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

$arr = [
    'arr1' => ['1,1', '1.2', '1.3'],
    'arr2' => ['2.1', ['2.1.1', '2.1.2', '2.1.3'], '2.2', '2.3'],
    'arr3' => ['3.1', '3.2', '3.3'],
];

function rec ($arr) {
    $res = [];
    foreach ($arr as $k => $v) {
        if (is_array($arr[$k])) {
            rec($v);
        }
        $res[] = $v . '<br>';
    };
    return $res;
};
Answer 1

Предлагаю такой вариант:

<?php
$arr = [
    'arr1' => ['1.1', '1.2', '1.3'],
    'arr2' => ['2.1', ['2.1.1', '2.1.2', '2.1.3', ['2.5', '2.6', ['2.7', '2.8', ['2.9', '2.10']]]], '2.2', '2.3'],
    'arr3' => ['3.1', '3.2', '3.3'],
];

function rec ($arr, $level = 0) {
    $res = [];
    foreach ($arr as $k => $v) {
        if (is_array($arr[$k])) {
            rec($v, $level + 1); // увеличиваем уровень вложенности, если текущий элемент массив
        } else {
            if($level > 1) 
                echo str_repeat('  ', $level - 1); // делаем отступ в зависимости от вложенности
            echo $v.PHP_EOL; // PHP_EOL перенос строки
        }
    };
};
rec($arr);

Результат:

1.1
1.2
1.3
2.1
  2.1.1
  2.1.2
  2.1.3
    2.5
    2.6
      2.7
      2.8
        2.9
        2.10
2.2
2.3
3.1
3.2
3.3
READ ALSO
Вопрос о curl php

Вопрос о curl php

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

93
Gradle: создание .jar файла

Gradle: создание .jar файла

Содержание buildgradle:

133
назначение интерфейса в java [дубликат]

назначение интерфейса в java [дубликат]

привожу пример из некоего сайта:

127
Как правильно внедрить проект C++ в Android?

Как правильно внедрить проект C++ в Android?

Такая история, у меня есть проект написаный на C++, который компилируется и работает

135