【发布时间】:2014-03-14 11:59:56
【问题描述】:
我正在编写导航菜单并卡住了。
基本上我有一个 foreach 循环,如果页面 id 为 0,它会运行一些逻辑。 该逻辑运行另一个 foreach 循环,检查当前页面是否有任何子页面。如果有,它定义第三个 foreach 循环来检查当前子页面是否有任何子子页面。
我遇到的问题是,我需要第二个和第三个 foreach 循环来回循环以检查子子子页面等等。因此,我将第三个 foreach 循环中的变量编写为与第一个 foreach 循环相同,目的是将第二个和第三个 foreach 循环放入一个函数中,然后将其插入函数 buildMenu();在需要的地方,然后稍后在函数内部调用自身,以便它一遍又一遍地循环。
但是,似乎通过运行第三个 foreach 循环,值 for $b = $childpage['id']; 改变,以便当第二个 foreach 循环返回并尝试查看是否 $c == 第一个 foreach 循环中的 $b 它不再这样做,因为该值已被第三个循环更改。
所以我的问题是我能否在第二个 foreach 循环中保持 $b 的值,这样当第二个循环循环时,$b 仍然是第一个 foreach 循环设置的值,但随后也更改了 $ 的值b 在第三个循环中,以便在循环周期中使用新值。
希望这是有道理的,但代码在下面,所以希望你能明白我的意思。
如果不可能并且有更好的方法,我将不胜感激! 谢谢
<?php
function buildMenu2($allpages){
echo "<ul>\n";
foreach($allpages as $pageitem) {
$a = $pageitem['parentid'];
$b = $pageitem['id'];
if($a == 0){
echo "<li><a href=" . $pageitem['url'] . ">" . $pageitem['linklabel'] . "</a>";
echo "<ul>\n";
foreach($allpages as $childpage) {
$c = $childpage['parentid'];
$d = $childpage['id'];
if ($c == $b){
echo "<li><a href=" . $childpage['url'] . ">" . $childpage['linklabel'] . "</a>";
echo "<ul>\n";
foreach ($allpages as $childpage) {
$a = $childpage['parentid'];
$b = $childpage['id'];
if ($a == $d) {
echo "<li><a href=" . $childpage['url'] . ">" . $childpage['linklabel'] . "</a>";
echo "</li>";
};
};
echo "</ul>\n";
echo "</li>";
};
};
echo "</ul>\n";
echo "</li></br><br/><br/>";
};
};
echo "</ul>\n";
};
?>
【问题讨论】:
-
你听说过递归函数吗?
-
含糊不清,但我不是很熟悉 - 我想我可能已经解决了上述问题,但可能导致另一个与递归函数可能出现的函数有关。似乎如果我将第三个 foreach 中的 $b 更改为 $e ,然后在第二个 foreach 语句中调用带有 or 子句的 if 语句,例如if (($c == $b) or ($c == $e)) 我得到了我想要的结果,但是当我尝试将它全部放入重复函数时它会中断 - 有什么想法吗?