Рекурсивная функция для сортировки родительских и дочерних узлов в 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>';
}
}
}
?>
Как всегда, любая помощь приветствуется. Пожалуйста, дайте мне знать, если что-то не понятно.