Рекурсивная функция для сортировки родительских и дочерних узлов в PHP с использованием цикла foreach в массиве

У меня есть набор данных, хранящийся в массиве, который ссылается на себя с идентификаторами parent-child: id, parent_id, title и т.д. Верхний уровень имеетparent_id из0и может быть бесчисленное множество родительско-дочерних отношений.

Поэтому я перебираю этот массив сforeach Цикл внутри рекурсивной функции для проверки каждого элемента массива по отношению к его родительскому элементу, и я думаю, что я слишком долго смотрел на этот метод.

Я получаю элементы в правильном порядке, но, похоже, я не могу правильно разместить свои списки, что заставляет меня думать, что метод не работает.

Is this the best route to take? What can I do to improve and fix this method Is there another trick that I can apply?

Вот мой источник:

<div>
    <div>Subpages</div>

    <ul>
    <?php subPages($this->subpages->toArray(), 0) ?>
    </ul>
    <br>
    <a href="javascript:;" onclick="">Add New Subpage</a>
</div>

<?php
    function subPages($subpages, $parent){

        foreach($subpages as $key => &$page){

            $newParent =  $page['id'];

            //If the current page is the parrent start a new list
            if($page['id'] == $parent)
            {
                //Echo out a new list
                echo '<ul>';
                echo '<li class="collapsed">';
                echo '<a href="javascript:;" class="toggle">+</a>';
                echo '<a href="javascript:;" onclick="">'.$page['title'].'</a>';        

                subPages($subpages, $newParent);

                echo '</li>';
                echo '</ul>';
            }
            //If the page's parent id matches the parent provided
            else if($page['parent_id'] == $parent)
            {
                //Echo out the link
                echo '<li class="collapsed">';
                echo '<a href="javascript:;" class="toggle">+</a>';
                echo '<a href="javascript:;" onclick="">'.$page['title'].'</a>';

                //Set the page as the new parent
                $newParent = $page['id'];

                //Remove page from array
                unset($subpages[$key]);

                //Check the rest of the array for children
                subPages($subpages, $newParent);

                echo '</li>';
            }
        }
    }
?>

Как всегда, любая помощь приветствуется. Пожалуйста, дайте мне знать, если что-то не понятно.

Ответы на вопрос(2)

Ваш ответ на вопрос