2012-11-29 52 views
0

我想通过使用foreach循环来制作一个嵌套的列表,但我现在被卡住了。我的代码使用foreach循环,并检查项目是否为标题,如果是,它将在其下面启动嵌套列表。现在的问题是,如果它不是标题,我想将相应的列表项放入其标题下的单个 ul元素。现在,您可以看到它将每个列表项不是标题,因为foreach循环会将其放入单独的ul元素中。我怎样才能解决这个问题?使用PHP foreach制作嵌套列表

<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> 
+1

向我们展示你的数组。 –

+0

你能显示所需的html结构吗? –

+0

处理它,我不熟悉stackoverflow。 –

回答

0

您需要设置内部列表和开始时的航向变化的结束标记。

像这样的事情

<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

你要改变$ 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>"; 
    ?>