Как сделать перебор массива

korpus

злой бобёр
Как сделать перебор массива

PHP:
<?php

$district_1[54][1]="Железнодорожный";
$district_1[54][2]="Калининский";
$district_1[54][3]="Центральный";


for (reset($district_1); $i=key($district_1); next($district_1))
{
  echo '<div name="vgor'.$i.'" id="vgor'.$i.'">';
  echo '<select name="gor'.$i.'">';
  for ($ik=1; $ik<=count($district_1[$i]);$ik++);
  {
    echo '<option value="'.$ik.'">'.$district_1[$i][$ik].'</option>';
  }
  echo "</select>";
  echo '</div>';
}



?>
Есть массив массивов, т.е. в переменную $district_1 записывается число (номер какого-то города, например). При этом изначально не известно, для какого города будет существовать массив. Т.е. скрипт должен корректно обрабатывать массив, если в нём несколько городов с разными цифрами, которые могут идти не подряд. Эта цифра служит ключом для другого массива, содержащего названия районов, идущих подряд. Т.е. $district_1['номер города']['номер района']

Скрипт выдаёт такой результат:

<div name="vgor54" id="vgor54"><select name="gor54"><option value="4"></option></select></div>

Как видно, перебор подмассива не произошёл, а результат с цифрой 4 вообще непонятен, т.к. первоначально устанавливается значение $ik=1, а количество элементов в подмассиве равно 3. Где в скрипте ошибка, что перебор массива нельзя сделать? Какой лёгкий и удобный способ есть перебрать массив, чтобы был нормальный перебор?
 

korpus

злой бобёр
Автор оригинала: Alexandre
for
foreach
while
do while
Если посмотрите на мой код, то там я так и сделал: применил два цикла for. Только вот результат какой-то непонятный получается. А в чём ошибка - непонятно.
 

Фанат

oncle terrible
Команда форума
Как видно, перебор подмассива не произошёл,
как раз наоборот. видно, что произошел: $ik равно 4

-~{}~ 07.04.09 15:42:

korpus
Я тебе открою страшное знание. Без шуток.
Программирование - это не написать программу.
Программирование - это найти, почему она не работает.
 

Grezz

Новичок
korpus, не учитесь по старой литературе, вместо

for (reset($district_1); $i=key($district_1); next($district_1))

можно использовать более читабельное и понятное

foreach ($district_1 as $i => $subarr)

вывод - в мануал по foreach

З.Ы. поаккуратнее с точкой с запятой ;)
 

Фанат

oncle terrible
Команда форума
йооопрст.
пришлось доотладить программу до одной строчки, чтобы найти проблему.
 

Фанат

oncle terrible
Команда форума
вот, кстати, оргумент за скобку на той же строчке, что и оператор
 

korpus

злой бобёр
Так кто-нибудь увидел ошибку? Почему такой результат неправильный?
 

Фанат

oncle terrible
Команда форума
возьми пример из мануала и вставь в свой код.
обычно это помогает, когда ну никак не можешь найти ошибку.
вместо внутреннего цикла
и подставь в него свои переменные
 
Сверху