Eine rekursive Funktion zum Sortieren von übergeordneten und untergeordneten Knoten in PHP mithilfe einer foreach-Schleife in einem Array

Ich habe einen Datensatz in einem Array gespeichert, das sich selbst mit Eltern-Kind-IDs referenziert:id, parent_id, title usw. Die oberste Stufe hat eineparent_id von0Und es kann unzählige Eltern-Kind-Beziehungen geben.

Also sortiere ich dieses Array mit einemforeach Schleife innerhalb einer rekursiven Funktion, um jedes Array-Element mit seinem übergeordneten Element zu vergleichen, und ich glaube, ich habe diese Methode zu lange angestarrt.

Ich habe zwar die Elemente in der richtigen Reihenfolge, aber ich kann meine Listen scheinbar nicht richtig verschachteln, weshalb ich denke, dass die Methode nicht wirklich funktioniert.

Ist dies der beste Weg?Was kann ich tun, um diese Methode zu verbessern und zu beheben?Gibt es einen anderen Trick, den ich anwenden kann?

Hier ist meine Quelle:

<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>';
            }
        }
    }
?>

Wie immer wird jede Hilfe geschätzt. Bitte lassen Sie mich wissen, wenn etwas nicht klar ist.

Antworten auf die Frage(2)

Ihre Antwort auf die Frage