首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用php foreach生成嵌套列表

问使用php foreach生成嵌套列表
EN

Stack Overflow用户
提问于 2012-11-29 11:58:20
回答 2查看 2.3K关注 0票数 0

我试图使用foreach循环生成一个带有php的嵌套列表,但我现在有点卡住了。我的代码使用了foreach循环,并检查条目是否是标题,如果是,它将在其下面启动一个嵌套列表。现在的问题是,如果它不是标题,我想将相应的列表项放在标题下面的单个 ul元素中。现在,正如您所看到的,它将每个不是标题的列表项放入一个独立的ul元素中,因为它使用了foreach循环。我怎么才能解决这个问题?

代码语言:javascript
复制
<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输出:

代码语言:javascript
复制
<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>
EN

回答 2

Stack Overflow用户

发布于 2012-11-29 12:19:21

当标题更改时,您需要设置内部列表开始和结束标记。

就像这样

代码语言:javascript
复制
<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>
票数 0
EN

Stack Overflow用户

发布于 2012-11-29 12:26:18

您必须更改$listitems格式。

有些人是这样的:

代码语言:javascript
复制
<?php
    $listitems = array(
      'item1' => array(
         'item11',
         'item12',
         'item13'
      ),
      'item2' => array(
         'item21',
         'item22',
      ),
      'item3',
      'item4'
    );

?>

然后,这样做:

代码语言:javascript
复制
<?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>";
    ?>
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/13625337

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档