【问题标题】:foreach loop within foreach loop changes variable value unwillinglyforeach 循环中的 foreach 循环不情愿地更改变量值
【发布时间】: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)) 我得到了我想要的结果,但是当我尝试将它全部放入重复函数时它会中断 - 有什么想法吗?

标签: php foreach


【解决方案1】:

为什么不能创建一个函数并递归调用它来获取页面的子页面?

我对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
      }
}

如果需要更多信息,请告诉我……:)

【讨论】:

  • 谢谢 - 我对递归函数知之甚少,但我会去研究一下,看看这是否能解决我的问题 :)
  • @Smokescreen.. 如果对您没有帮助,请告诉我。如果有帮助,请随时接受/支持答案.. :)
  • 嗨,我一直在尝试了解递归函数,但似乎还没有完全破解它,我只是想知道你是否可以看看我最近的尝试看看我可能哪里出错了?它在另一篇文章中,因为我遇到了其他问题并编辑了该问题以包括我目前的情况 - stackoverflow.com/questions/22465112/… 谢谢你的帮助
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-05-28
  • 1970-01-01
  • 1970-01-01
  • 2012-01-03
  • 1970-01-01
相关资源
最近更新 更多