PHP从3d数组生成HTML列表?

PHP从3d数组生成HTML列表?,php,foreach,html-lists,Php,Foreach,Html Lists,我正在尝试从3d数组创建html列表: <?php $items = [ 0 => [ 'id' => 100, 'parent_id' => 0, 'url' => 'Home', 'children' => [] ], 1 => [ 'id' => 101, 'parent_id' => 0, 'url

我正在尝试从3d数组创建html列表:

<?php
$items = [
    0 => [
        'id' => 100,
        'parent_id' => 0,
        'url' => 'Home',
        'children' => []
    ],

    1 => [
        'id' => 101,
        'parent_id' => 0,
        'url' => 'About',
        'children' => [
            0 => [
                'id' => 102,
                'parent_id' => 101,
                'url' => 'About 1'
            ],

            1 => [
                'id' => 102,
                'parent_id' => 101,
                'url' => 'About 2'
            ],

            2 => [
                'id' => 102,
                'parent_id' => 101,
                'url' => 'About 3'
            ],
        ]
    ],

];

?>

<?php if (count($items) > 0) { ?>
<ul>

    <?php foreach ($items as $item) { ?>
    <li><?php echo $item['url'];?>

        <?php if(count($item['children']) > 0) { ?>
            <ul class="nested">
                <?php foreach ($item['children'] as $subitem) { ?>
                    <li><?php echo $subitem['url'];?></li>
                <?php } ?>
            </ul>
        <?php } ?>

    </li>
    <?php } ?>

</ul>
<?php } ?>

结果:

<ul>
    <li>Home</li>
    <li>About
        <ul class="nested">
            <li>About 1</li>
            <li>About 2</li>
            <li>About 3</li>
        </ul>
    </li>
</ul>
  • 关于
    • 大约1
    • 大约2
    • 大约三点
但我所追求的是:

<ul>
    <li>Home</li>
    <li>About
        <ul class="nested">
            <li>About 1</li>
        </ul>
        <ul class="nested">
            <li>About 2</li>
        </ul>
        <ul class="nested">
            <li>About 3</li>
        </ul>
    </li>
</ul>
  • 关于
    • 大约1
    • 大约2
    • 大约三点
有什么想法吗


或者,数组结构应该是怎样的来实现我想要的HTML列表?

用这样的东西添加一些递归怎么样?无论尺寸有多深(3D、4D等),它都会照顾到您的列表

函数创建列表($items){
if(count($items)==0)返回null;//如果子项为空
如果(!array_key_存在('children',$items)| count($items['children'])==0){
回显“
  • ”.$items['url']”。
  • ; 返回null; } //只是为了确保我们有“url”索引 如果(数组\键\存在('url',$items)){ 回显“
  • ”.$items['url']”。
  • ; } foreach($items['children']作为$child){ 回声“
      ”; 创建_列表($child); 回声“
    ”; } } 回声“
      ”; foreach($items作为$item){ 创建_列表($item); } 回声“
    ”;
    用这样的东西添加一些递归怎么样?无论尺寸有多深(3D、4D等),它都会照顾到您的列表

    函数创建列表($items){
    if(count($items)==0)返回null;//如果子项为空
    如果(!array_key_存在('children',$items)| count($items['children'])==0){
    回显“
  • ”.$items['url']”。
  • ; 返回null; } //只是为了确保我们有“url”索引 如果(数组\键\存在('url',$items)){ 回显“
  • ”.$items['url']”。
  • ; } foreach($items['children']作为$child){ 回声“
      ”; 创建_列表($child); 回声“
    ”; } } 回声“
      ”; foreach($items作为$item){ 创建_列表($item); } 回声“
    ”;
    function create_list($items) {
        if (count($items)==0) return null; // if your child item is empty
    
        if (!array_key_exists('children', $items) || count($items['children'])==0) {
            echo '<li>'.$items['url'].'</li>';
            return null;
        }
    
        // just to be sure we have the index 'url'
        if (array_key_exists('url', $items)) {
            echo '<li>'.$items['url'].'</li>';
        }       
    
        foreach($items['children'] as $child) {
            echo "<ul class='nested'>";
            create_list($child);        
            echo "</ul>";
        }
    }
    
    echo "<ul>";
    foreach($items as $item) {
        create_list($item);
    }
    echo "</ul>";