Вы не учли родительский идентификатор:
function categoryTree($permissionRecord, $parent_id = 0, $sub_mark = '')
{
foreach($permissionRecord as $row) {
if ($row->parentid == $parent_id) {
echo $sub_mark.$row->name;
$this->categoryTree($permissionRecord, $row->id, $sub_mark.'---');
}
}
}
Попробуйте и посмотрите, что произойдет. - Примечание. Я завернул рекурсивный вызов функции в if()
, который проверяет, являются ли текущие записи parentIdравно родительскому идентификатору, переданному в метод.
Чтобы отобразить элементы в списке с отступом:
public function categoryTree($permissionRecord, $parent_id = 0)
{
$html = '<ul>';
foreach($permissionRecord as $row) {
if ($row->parentid == $parent_id) {
$html .= '<li>' . $row->menuname;
$html .= $this->categoryTree($permissionRecord, $row->id, $html);
$html .= '</li>';
}
}
$html .= '</ul>';
return $html;
}
Затем просто вызовите:
$html = $this->categoryTree($permissionRecord);
Пример работы с модульным тестом