代码之家  ›  专栏  ›  技术社区  ›  JeroenEijkhof

foreach循环破坏了我的阵列?

  •  3
  • JeroenEijkhof  · 技术社区  · 16 年前

    解释

    我有一个多维数组,它经过迭代,创建了一个具有不同研究兴趣的人的分类视图。主数组如下所示:

    Array
    (
        ...
        ['Cell Biology']      => Array(4 elements)
        ['Molecular']         => Array(6 elements)
        ['Biology Education'] => Array(14 elements)
        ['Plant Biology']     => Array(19 elements)  <--- Last element in array
    )
    

    我知道整个数组是完整的,并且结构正确。这些数组中唯一的信息是用户ID,如下所示:

    Array ('Plant Biology') 19 elements
    (
        [0] => 737
        [1] => 742
        [2] => 748
        ...
    )
    

    我的问题是,在我通过foreach循环运行主数组之后,最后一个“子数组”会变得混乱。我的意思是,你看到的东西看起来像:

    String (13 characters) 'Plant Biology'
    

    这根本不需要在循环内对损坏的数组执行任何操作。

    有什么建议吗?

    PHP代码

      // ---> Array is OK here
      echo "<h2>Research divided</h2>";
      // Loop areas and list them in 2 columns
      foreach($research['areas'] as $area => $areaArray) {
          // ---> Here it is already corrupted
          $count = count($areaArray);
          if($count > 0) {
              echo "<h3>$area</h3><hr/>";
              echo "<ul>";
              // Loop users within areas, divided up in 2 columns
              for($i=0 ; $i<$count ; $i++) {
                  $uid = $areaArray[$i];
                  echo "<li>$uid</li>";
              }
              echo "</ul>";
          }
      }
    
    2 回复  |  直到 13 年前
        1
  •  3
  •   Pekka    16 年前

    脚本中其他地方的不同函数中是否使用了$area或$areaArray?如果将它们重命名为$loop_area和$loop_arearray以防止意外覆盖变量,会发生什么情况?

        2
  •  1
  •   Jai    16 年前

    如果您以前使用相同的变量名对数组进行循环,则可能会出现错误。

    因此,如果代码中的$areaArray在foreach中被引用,它可能会损坏您的数据。

    确保foreach中的两个变量以前没有使用过,或者在循环之前取消设置它们。

    退房:

    http://bugs.php.net/29992

    有关此类问题的详细信息。