цикл foreach портит мой массив? - PullRequest
3 голосов
/ 24 марта 2010

Объяснение

У меня есть многомерный массив, который итерируется для создания категоризованного представления людей с различными исследовательскими интересами. Основной массив выглядит примерно так:

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

Я знаю, что весь массив не поврежден и правильно структурирован. Единственная информация, которая находится внутри этого массива, это идентификатор пользователя, например:

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 ]

3 голосов
/ 24 марта 2010

Используются ли $ area или $ areaArray в других функциях в другом месте вашего скрипта? Что произойдет, если вы переименуете их в $ loop_area и $ loop_areaArray, чтобы предотвратить случайное перезапись переменных?

1 голос
/ 24 марта 2010

Это похоже на ошибку, которая может произойти, если вы зациклите массив ранее по ссылке, используя то же имя переменной для значения.

Так что, если ранее в вашем коде $ areaArray используется в foreach по ссылке, это может повредить ваши данные.

Убедитесь, что обе переменные в вашем foreach не используются ранее, или сбросьте их перед циклом.

Выезд:

http://bugs.php.net/29992

Для получения дополнительной информации об этой проблеме.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...