2014-03-14 6 views
0

Я пишу навигационное меню и застреваю.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"; 

     }; 
    ?> 
+0

Вы слышали о рекурсивной функции? –

+0

Смутно, но я не так привык - я думаю, что я, возможно, решил проблему выше, но, возможно, вызвал другую работу с функциями, которые могут быть там, где может возникнуть рекурсивный функционал. Кажется, что если я изменю $ b в третьем foreach в $ e, а затем вызывать оператор if с предложением или во втором предложении foreach, например if (($ c == $ b) или ($ c == $ e)) Я получаю результат, который хочу, но когда я пытаюсь превратить его в повторяющуюся функцию, которую он ломает - любые идеи? – Smokescreen

ответ

0

Почему вы не можете создать функцию & вызывать рекурсивно, чтобы получить подстраницами страницы?

Я много о PHP не знаю, но даст вам псевдокод .. Надеюсь, что это помогает

myRecursiveFunction(page) 
{ 
    if (page.subpage!=nil) // checks if subpages are there 
    { 
     for each subpage in page.subpage 
     { 
      myRecursiveFunction(subpage); 
     } 
    } 
    else{ 
     //write your logic here.. may be to get URL of the page 
     } 
} 

Позвольте мне знать, если нужно больше информации ... :)

+0

спасибо - Я не очень много знаю о рекурсивных функциях, но я пойду и научусь и посмотрю, решит ли это мою проблему :) – Smokescreen

+0

@Smokescreen .. Дайте мне знать, если это вам не поможет. Если это помогает, не стесняйтесь принимать/повышать ответ. :) –

+0

Привет, я пытаюсь задрать рекурсивные функции, но все еще, похоже, пока что не взломал его, и мне было просто интересно, можете ли вы взгляните на мою последнюю попытку и посмотрите, где я могу ошибиться? Его в другом посте, поскольку у меня были проблемы с чем-то другим, и отредактировал этот вопрос, чтобы включить мою текущую ситуацию - http://stackoverflow.com/questions/22465112/check-if-value-from-a-foreach-loop- спасибо за вашу помощь – Smokescreen

Смежные вопросы