【问题标题】:Making a nested list with php foreach使用 php foreach 制作嵌套列表
【发布时间】:2012-11-29 11:58:20
【问题描述】:

我正在尝试使用 foreach 循环使用 php 创建一个嵌套列表,但我现在有点卡住了。我的代码使用 foreach 循环并检查该项目是否为标题,如果是,它将在其下方开始一个嵌套列表。现在的问题是,如果它不是标题,我想将相应的列表项放入其标题下方的 single ul 元素中。现在,正如您所看到的,由于 foreach 循环,它将不是标题的每个列表项都放入了它自己的单独的 ul 元素中。我该如何解决这个问题?

<ul>
    <?php foreach($listitems as $listitem) :  ?>

        <?php if( $listitem['heading'] == 1) : ?>
            <li><?php echo $listitem['listitem']; ?><!--begin nested list-->
        <?php endif; ?>             

        <?php if( $listitem['heading'] == 0) : ?>                   
                <ul><li><?php echo $listitem['listitem']; ?></li></ul>                                                          
        <?php endif; ?>                         

    <?php endforeach; ?>
    </li><!--end nested list-->
</ul>

这是所需的 html 输出:

<ul>
    <li>Javascript Basics<!--begin nested list-->
                <ul>
                    <li>Getting Started</li>
                    <li>Data and Variables</li>
                    <li>Functions</li>
                    <li>Scope</li>
                    <li>Working With Objects</li>
                    <li>Creating Objects</li>
                    <li>Arrays</li>
                    <li>Conditions And Decisions</li>
                    <li>Loops</li>
                </ul>
            </li><!--end nested list-->
    </ul>

【问题讨论】:

  • 你能展示出想要的html结构吗?
  • 正在处理它,我对stackoverflow不太熟悉。

标签: php mysql foreach


【解决方案1】:

当标题改变时,你需要设置内部列表的开始和结束标签。

类似的东西

<ul>
    <?php 
    $NonHeadCount = 0;
    $HeadingOpen = false;
    foreach($listitems as $listitem)
    {
        if( $listitem['heading'] == 1)
        {
            $HeadingOpen = true;
            if ($NonHeadCount != 0)
            {
                echo "</ul>";
            }
            echo "<li>".$listitem['listitem'];
            $NonHeadCount = 0;
        }           

        if( $listitem['heading'] == 0)
        {
            if ($NonHeadCount == 0)
            {
                echo "<ul>";
            }
            echo "<li>".$listitem['listitem']."</li>";
        }

    }
    if ($NonHeadCount != 0)
    {
        echo "</ul>";
    }
    if ($HeadingOpen)
    {
        echo "</li>";
    }
    ?>
</ul>

【讨论】:

    【解决方案2】:

    您必须更改 $listitems 格式。

    有些是这样的:

    <?php
        $listitems = array(
          'item1' => array(
             'item11',
             'item12',
             'item13'
          ),
          'item2' => array(
             'item21',
             'item22',
          ),
          'item3',
          'item4'
        );
    
    ?>
    

    然后,这样做:

    <?php
    echo "<ul>";
    
        foreach($listitems as $item => $listitem):
           echo "<li>$item</li>";
           if(count($listitem) > 0):
              echo "<ul>";
                foreach($lisitem as $item):
                    echo "<li>$item</li>";
                endforeach;
              echo "</ul>";
           endif;
        endforeach;
    
    
       echo "<ul>";
        ?>
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-05-21
      • 2017-02-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-05-02
      相关资源
      最近更新 更多