我发现这个问题非常具有挑战性。我有一个类似于此的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" }
答案 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>";
}