Допустим необходимо создать карту сайта или просто вывести полностью древо (дерево) категорий с неограниченным числом элементов и уровнем вложенности, имея на входе массив:
$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>.