Вывести карту сайта (древо категорий)

От 13 Январь 2015. Опубликовано в PHP

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

$cats = [
  "Consumer Electronics" => [
    "HD Media Players" => [
      "Android HD Players",
      "HD Media Players",
    ],
    "A/V Adapters & Convertors",
    "Headphones",
    "Bluetooth Devices" => [
      "Bluetooth Speakers",
      "Other Bluetooth Devices",
      "Bluetooth Headphones",
    ],
  ],
  "Computer & Networking" => [
     "Card Readers",
  ],
  "Cell Phone" => [
    "Cell Phones" => [
      "Android Phones" => [
        "Android 2.x Phones",
        "Android 4.x Phones",
      ],
    ],
  ],
  "Cell Phone1" => [
    "Cell Phones" => [
      "Android Phones" => [
        "Android 2.x Phones",
        "Android 4.x Phones",
      ],
    ],
  ],
  "Cell Phone2" => [
    "Cell Phones" => [
      "Android Phones" => [
        "Android 2.x Phones",
        "Android 4.x Phones",
      ],
    ],
  ],
];

Необходимо прибегнуть к рекурсии и написать функцию (и вызвать ее конечно), которая будет выглядеть так, при этом она посчитает уровень вложенности:

function getTree($cats, $level)
{
  $separate = '__';
  foreach ($cats as $key => $value)
  {
    $lvl = $level;
    if(is_array($value))
    {
      echo str_repeat($separate, $lvl).''.$key.'\n';
      $lvl++;
      getTree($value, $lvl);
    }
    else
    {
      echo str_repeat($separate, $lvl).''.$value.'\n';
    }
  }
}
 
getTree($cats, 1);

На выходе получим:

__Consumer Electronics
____HD Media Players
______Android HD Players
______HD Media Players
____A/V Adapters & Convertors
____Headphones
____Bluetooth Devices
______Bluetooth Speakers
______Other Bluetooth Devices
______Bluetooth Headphones
__Computer & Networking
____Card Readers
__Cell Phone
____Cell Phones
______Android Phones
________Android 2.x Phones
________Android 4.x Phones
__Cell Phone1
____Cell Phones
______Android Phones
________Android 2.x Phones
________Android 4.x Phones
__Cell Phone2
____Cell Phones
______Android Phones
________Android 2.x Phones
________Android 4.x Phones

Оформляем как нужно, например обертываем в <ul>, <li>.

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


Защитный код
Обновить