Я пишу навигационное меню и застреваю.foreach loop внутри цикла foreach меняет значение переменной неохотно
В принципе, у меня есть цикл foreach, который запускает некоторую логику, если идентификатор страницы равен 0. Эта логика запускает другой цикл foreach, который проверяет, есть ли какие-либо подстраницы к текущей странице. Если это так, то он определяет третий цикл foreach для проверьте, есть ли какие-либо подписки для текущей подстраницы.
Проблема, с которой я столкнулась, заключается в том, что мне нужны второй и третий петли foreach, чтобы обходить вокруг и вокруг, чтобы проверить суб-суб-страницы и так далее. Поэтому я написал переменные в третьем цикле foreach, чтобы быть таким же, как первый цикл foreach, с намерением поместить второй и третий петли foreach в функцию, которая затем вставляется в функцию buildMenu(); где это необходимо, и затем затем вызывает себя внутри функции, чтобы она повторялась снова и снова.
Однако, кажется, что, пройдя третий цикл foreach, значение для $ b = $ childpage ['id']; изменяет так, что когда второй цикл foreach петли назад и пытается увидеть, $ c == the $ b из первого цикла foreach больше не работает, потому что значение было изменено третьим циклом.
Итак, мой вопрос в том, могу ли я поддерживать значение $ b во втором цикле foreach, так что, когда второй цикл цикла завершает сам по себе $ 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";
};
?>
Вы слышали о рекурсивной функции? –
Смутно, но я не так привык - я думаю, что я, возможно, решил проблему выше, но, возможно, вызвал другую работу с функциями, которые могут быть там, где может возникнуть рекурсивный функционал. Кажется, что если я изменю $ b в третьем foreach в $ e, а затем вызывать оператор if с предложением или во втором предложении foreach, например if (($ c == $ b) или ($ c == $ e)) Я получаю результат, который хочу, но когда я пытаюсь превратить его в повторяющуюся функцию, которую он ломает - любые идеи? – Smokescreen