php函数打破foreach循环

时间:2014-03-12 19:21:41

标签: php function foreach

我正在尝试编写一个函数来使用MYsql数据库中的值生成导航菜单。我有所有的值,并已将它们存储在数组中,我已经测试了部分代码的foreach循环,但如果我尝试将它放在一个函数中,它会破坏吗?我在文档中搜索过一个答案,并且已经看到一些关于函数外部使用的变量/数组的东西不允许在函数内使用但是当我改变它并使用不同的变量时,一切都会中断。有人可以对此有所了解吗?

以下代码:

这有效:

  <?php  

foreach($pageWithNoChildren as  $arrayofpageinformation) {
echo "<a href=" . $arrayofpageinformation['url'] . ">" . $arrayofpageinformation['linklabel'] . "</a></br>";
} 
?>

但这不是

     <?php  
      function buildMenu(){

  foreach($pageWithNoChildren as  $arrayofpageinformation) {
   echo "<a href=" . $arrayofpageinformation['url'] . ">" . $arrayofpageinformation['linklabel'] . "</a></br>";
  }
      };   
   ?>

   <?php buildMenu(); ?>

这也不是

<?php  
          function buildMenu($pageWithNoChildren){

      foreach($pageWithNoChildren as  $arrayofpageinformation) {
       echo "<a href=" . $arrayofpageinformation['url'] . ">" . $arrayofpageinformation['linklabel'] . "</a></br>";
      }
          };   
       ?>

  <?php buildMenu(); ?>

或者

<?php  
      function buildMenu($items){

  foreach($items as  $item) {
   echo "<a href=" . $item['url'] . ">" . $item['linklabel'] . "</a></br>";
  }
      };   
   ?>

   <?php buildMenu($pageWithNoChildren); ?>

2 个答案:

答案 0 :(得分:0)

对于函数,如果变量不是全局变量或未设置为参数,则函数将无法访问它,因为函数具有局部范围。

  • 第一个只是因为没有功能而起作用。
  • 第二个不起作用,因为变量既不是全局变量也不是作为函数的参数发送。您可以将其更改为:

    <?php 
    function buildMenu(){
        global $pageWithNoChildren;
        foreach($pageWithNoChildren as  $arrayofpageinformation) {
            echo "<a href=" . $arrayofpageinformation['url'] . ">" . $arrayofpageinformation['linklabel'] . "</a></br>";
        }
    };   
    ?>
    <?php buildMenu(); ?>
    

    这告诉函数使用 global 而不是 local 范围来访问变量。
    您也可以将其更改为第四个示例,因为该示例应该有效。

  • 第三种方法与第二种方法的原因不同。
  • 第四个应该有效,因为当变量作为参数传递时,函数可以访问它。

答案 1 :(得分:0)

关于三个非工作区块,

1)参数未在函数和调用期间传递。

2)在调用期间未传递参数。

3)它正在工作!再次检查按键。