我正在研究原型,并希望构建一个多级导航 - 但不是通过循环数组。我有一个$ depth和一个$ children,它应该确定导航的深度和每个级别的孩子数量。所以$ depth = 4,$ children = 8会产生4096个菜单项。
这是我希望输出的片段:
<ul>
<li class="level-1">
<a href="#">Subject 1</a>
<ul>
<li class="level-2">
<a href="#">Subject 1.1</a>
<ul>
<li class="level-3">
<a href="#">Subject 1.1.1</a>
</li>
...
</ul>
</li>
...
</ul>
</li>
...
</ul>
到目前为止,我已经尝试了这个,但我无法理解它:(
function draw_list ($depth, $children) {
echo '<ul>';
for ($i = 0; $i < $children; $i++) {
echo '<li>' . ($i++);
$depth--;
if ($depth > 0) {
echo draw_list($depth, $children);
}
echo '</li>';
}
echo '</ul>';
}
答案 0 :(得分:0)
我看到了几件事......
$depth--;
需要超出for
循环$i
两次递增,一次在for
语句中,然后再次在echo '<li>' . ($i++);
>=
而不是>
那应该给你......
function draw_list ($depth, $children) {
echo '<ul>';
$depth--;
for ($i = 0; $i < $children; $i++) {
echo '<li>' . $i;
if ($depth > 0) {
echo draw_list($depth, $children);
}
echo '</li>';
}
echo '</ul>';
}
<强>更新强>
要显示级别编号,请尝试将字符串值作为参数传递...
function draw_list ($depth, $children, $display=''){
echo '<ul>';
$depth--;
for ($i = 0; $i < $children; $i++) {
echo '<li>' . $display . ($i + 1);
if ($depth > 0) {
echo draw_list($depth, $children, $display . ($i + 1) . '.');
}
echo '</li>';
}
echo '</ul>';
}
答案 1 :(得分:0)
我最终这样做了:
function build_nav ($depth, $children, $levels = array()) {
echo '<ul>';
$depth--;
for ($i = 0; $i < $children; $i++) {
$levels[$depth] = $i+1;
echo '<li>';
echo 'Subject: ' . implode('.', $levels);
if ($depth > 0) {
build_nav($depth, $children, $levels);
}
echo '</li>';
}
echo '</ul>';
}