Проблема в том, что после обработки первого элемента на базовом слое вы затем return
внутри цикла foreach
, что означает, что он не пойдет на дальнейшие элементы.
Вместо этого вам нужносоздать все выходные данные и вернуть их из конца функции ...
function extractLayer($parent, $arrayAllObjects){
$output = "";
foreach ($arrayAllObjects as $object) {
if ($object["parent"]==$parent) {
$subLayer = extractLayer($object["ID"], $arrayAllObjects);
if ( !empty($subLayer) ) {
$output .="<ul>".$object["name"].$subLayer."</ul>";
}
else {
$output .= "<li>".$object["name"]."</li>";
}
}
}
return $output;
}
echo extractLayer("0", $allObjects);
Я также изменил имя функции, так как r
неочевидно.
Просто обновил это, поскольку каждый лист также строил свой собственный список, даже если не было подслоев.Таким образом, это проверяет подслои и, если их нет, просто помещает элемент в теги <li>
.