、などの親子 ID でそれ自体を参照する配列に格納されたデータ セットがあります
id
。最上位層には があり、無数の親子関係が存在する可能性があります。parent_id
title
parent_id
0
そのため、再帰関数内のループを使用してこの配列を並べ替えて、foreach
各配列要素をその親要素に対してチェックしていますが、このメソッドを長時間見つめていたと思います。
最終的には正しい順序で要素が配置されますが、リストを正しくネストできないように見えるため、この方法は実際には機能しないと思います。
- これが最善のルートですか?
- この方法を改善および修正するにはどうすればよいですか
- 適用できる別のトリックはありますか?
ここに私の情報源があります:
<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>';
}
}
}
?>
いつものように、どんな支援も大歓迎です。何か不明な点があればお知らせください。