Вы можете использовать рекурсивную функцию, подобную этой.
$data = array(
'electronics' => array(
'televisions' => array(
'tube',
'lcd',
'plasma',
),
'portable electronics' => array(
'MP3 players' => array(
'flash',
),
'CD players',
'2 way radios',
),
),
);
function build_ul($contents){
$list = "<ul>\n";
foreach($contents as $index => $value){
if(is_array($value)){
$item = "$index\n" . build_ul($value);
} else {
$item = $value;
}
$list .= "\t<li>$item</li>\n";
}
$list .= "</ul>\n";
return $list;
}
print build_ul($data);
Вам нужно будет изменить функцию, чтобы добавить числа, отображающие итоги для категории.
Обратите внимание: поскольку PHP не оптимизирован для обработки рекурсивных функций, таких как некоторые другие языки (например, Lisp), вы можете столкнуться с проблемами производительности, если у вас большие объемы данных. С другой стороны, если у вас иерархическая структура глубже, чем три или, может быть, четыре уровня, вы все равно начнете сталкиваться с проблемами, потому что на одной веб-странице трудно разумно отобразить такую иерархию.