@MarkBogrov

Как разложить такой массив на уровни?

Прошу помощи в элементарном вопросе возникшем от плохого понимания работы циклов.

Есть такой массив данных:

[0] => Array
    (
      [273] => Business
      [317] => Rent
      [377] => Places
    )

[273] => Array
    (
        [1676] => Corporations
        [775] => Vacations
        [1384] => Services
    )

[317] => Array
    (
        [774] => Car
        [901] => Bike
    )

[377] => Array
    (
        [520] => Restaurants
        [364] => Bars
        [767] => Parcks
    )
...


Пытаюсь разложить по типу:

Business
- Corporations
- Vacations
- Services
Rent
- Corporations
- Vacations
- Services
Places
- Restaurants
- Bars
- Parcks
...
Я полагаю что необходимо в правильном порядке расставить if'ы напимер массив с key 0 идёт в первом цикле, потом по ключу раскручиваю вложенный цикл... ну и тут мой ход мыслей встречает лимит весьма скромного опыта.

Буду благодарен за любые подсказки которые могут помочь переварить эту задачу.
  • Вопрос задан
  • 182 просмотра
Решения вопроса 1
Rsa97
@Rsa97
Для правильного вопроса надо знать половину ответа
Тут, скорее всего, только рекурсией. Что-то вроде такого:
$data = array(0 => array(273 => 'Business', 317 => 'Rent', 377 => 'Places'),
              273 => array(1676 => 'Corporations', 775 => 'Vacations', 1384 => 'Services'),
              317 => array(774 => 'Car', 901 => 'Bike'),
              377 => array(520 => 'Restaurants', 364 => 'Bars', 767 => 'Parcks')
);

function makeTree($data, $level, $root) {
  if (!isset($data[$root]))
    return "";
  $str = "";
  foreach($data[$root] as $id => $name) {
    $str .= "<li data-id='{$id}' class='level{$level}'>${name}";
    $str .= makeTree($data, $level+1, $id);
  }
  return ("" == $str ? "" : "<ul>{$str}</ul>");
}

print makeTree($data, 0, 0);


  • Business
    • Corporations
    • Vacations
    • Services
  • Rent
    • Car
    • Bike
  • Places
    • Restaurants
    • Bars
    • Parcks
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
Flashter
@Flashter
Учусь программировать
Вижу 2 пути решения
1) Проходишься по массиву и через условия создаешь новый где лежит все как на выводе
2) Или сразу формируешь 3 строки с конкатенацией тех элементов которые там должны быть
Это если у тебя всегда 3 элемента в массиве, если больше - нужно еще подумать
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы