【发布时间】:2016-11-18 23:10:55
【问题描述】:
我发现这个问题非常具有挑战性。我有一个看起来像这样的 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>
现在我面临一个棘手的情况。我用箭头显示的<ul> 的开头因为foreach 每次都在循环。所以每次循环运行时都是这样的:
<ul><li></li><ul>
<ul><li></li><ul>
我不希望<ul></ul> 每次都循环播放。有没有办法输入一次<ul>,下次循环运行时不要输入。每次循环运行时只输入<li>。
这是 $records 的转储。
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" }
【问题讨论】:
-
你能显示 $records 的转储和你预期的结果吗?了解更多
-
我不明白为什么你需要
<ul>在循环中。您想要的输出只是在循环打印的所有<li>之前。 -
当你使用
substr($r['pon_port'],4,1)时,你如何得到Level 1.1.1之类的东西?那应该只在锚文本中放置一个字符。 -
@karthik N 我已经更新了问题。
-
@barmar 这只是一种格式。我只想显示一个数字。我没有得到什么负面标记?我认为这个问题是一个棘手的问题,每个人都会有机会学习。我的问题是不是无法理解>>??
标签: php html arrays loops foreach