简单的Foreach循环与棘手的情况

时间:2016-07-15 16:42:31

标签: php html arrays loops foreach

我发现这个问题非常具有挑战性。我有一个类似于此的foreach循环。

<ul class="menu">
<li class="menu1"><a href="#"><?php echo $records[0]['olt_name'] ?></a>
        <ul class="menu">
            <?php
            $unique = array();
            foreach($records as $r)
            {
                $a = substr($r['pon_port'],2,1);
                if(!in_array($a, $unique)) {
                    $unique[] = $a;
                    echo '<li class="menu1"><a href="#">' . $a . '</a>'; //slots
                }

             ------->>>>>> echo '<ul class="menu">';
echo'<li class="menu1"><a href="#">'.substr($r['pon_port'],4,1).'</a></li>';

                        echo '</ul>';
            }

            echo '</li>';
            ?>
        </ul>
</li>
</ul>

我想要实现的是这样的列表项:

<ul>
<li><a href="#"> Level 1 </a>
<ul>
<li><a href="#"> Level 1.1 </a>
    <ul>
    <li><a href="#"> Level 1.1.1 </a></li>
    <li><a href="#"> Level 1.1.2 </a></li>
    <li><a href="#"> Level 1.1.3 </a></li>
    <li><a href="#"> Level 1.1.4 </a></li>
    </ul>
</li>
</ul>

现在我面临一个棘手的局面。由于foreach,我已经显示箭头的<ul>的开头每次循环。所以每次循环运行时都会这样:

<ul><li></li><ul> 
<ul><li></li><ul>

我不希望<ul></ul>每次循环。有没有办法输入<ul>一次,并且下次循环运行时输入donot。每次循环运行时才输入<li>

这是$ record的转储。

array(24) { [0]=> array(2) { ["pon_port"]=> string(5) "0/0/4" ["olt_name"]=> string(8) "BRT-OLT1" } 
[1]=> array(2) { ["pon_port"]=> string(5) "0/0/3" ["olt_name"]=> string(8) "BRT-OLT1" } 
[2]=> array(2) { ["pon_port"]=> string(5) "0/0/1" ["olt_name"]=> string(8) "BRT-OLT1" } 
[3]=> array(2) { ["pon_port"]=> string(5) "0/0/5" ["olt_name"]=> string(8) "BRT-OLT1" } 
[4]=> array(2) { ["pon_port"]=> string(5) "0/0/2" ["olt_name"]=> string(8) "BRT-OLT1" } 
[5]=> array(2) { ["pon_port"]=> string(5) "0/0/6" ["olt_name"]=> string(8) "BRT-OLT1" } [6]=> array(2) { ["pon_port"]=> string(5) "0/0/7" ["olt_name"]=> string(8) "BRT-OLT1" } 

1 个答案:

答案 0 :(得分:2)

使用变量来指示它是否是第一次循环。

$unique = array();
$first = true;
foreach ($records as $r) {
    $a = substr($r['pon_port'],2,1);
    if(!in_array($a, $unique)) {
        $unique[] = $a;
        echo '<li class="menu1"><a href="#">' . $a . '</a></li>'; //slots
    }
    if ($first) {
        echo "<ul>";
        $first = false;
    }
    echo'<li class="menu1"><a href="#">'.substr($r['pon_port'],4,1).'</a></li>';
}
if (!$first) {
    echo "</ul>";
}

DEMO