foreach循环破坏了我的阵列?

时间:2010-03-23 23:20:02

标签: php arrays multidimensional-array

说明

我有一个多维数组,它被迭代以创建一个具有不同研究兴趣的人的分类视图。主阵列看起来像这样:

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 个答案:

答案 0 :(得分:3)

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

答案 1 :(得分:1)

如果先使用相同的变量名称为referance循环遍历数组,则可能会出现错误。

因此,如果您的代码$ areaArray中的较早版本通过referance在foreach中使用,则可能会损坏您的数据。

确保先前未使用foreach中的两个变量或在循环之前取消设置它们。

退房:

http://bugs.php.net/29992

有关此类问题的更多信息。