Javascript-форум (https://javascript.ru/forum/)
-   Серверные языки и технологии (https://javascript.ru/forum/server/)
-   -   трехмерные массивы (https://javascript.ru/forum/server/27277-trekhmernye-massivy.html)

kilogram 07.04.2012 23:17

трехмерные массивы
 
Попробовал вывести массив:
Код:

for ($i=0,$x=0; $x<16; $x++) {
  for ($y=0; $y<16; $y++) {
    $chars[$x][$y] = array($i, chr($i));
    $i++;
  }
}


for ($i = 0; $i < count($chars); $i++)
  for ($j = 0; $j < count($chars[$i]); $j++)
      for ($k = 0; $k < count($chars[$i][$j]); $k++)
          echo $chars[$i][$j][$k].' ';

Вроде вывел. Интересует вопрос. Почему во втором внутреннем форе нужно писать $chars[$i], а в третем форе $chars[$i][$j] ?

T-sh 08.04.2012 00:02

потому, что:
1. массив трехмерный :)
2. если написать $chars[$i][$i] — то ключи будут только такими:
$chars[0][0]; $chars[1][1]; $chars[2][2] и т.д.

а чтоб они перебирались, во втором массиве счетчик идет для первых индексов, а в третьем — для вторых, и тогда получится:
$chars[0][0]; $chars[0][1]; $chars[0][2] ...
$chars[1][0]; $chars[1][1]; $chars[1][2] ...
$chars[2][0]; $chars[2][1]; $chars[2][2] ...

т.е. берем сначала первый индекс (например, 0), выводим всё, что есть с ним: 0-0, 0-1, 0-2

потом второй и т.д.

kilogram 08.04.2012 00:04

То есть нужно перейти к счетчику во втором форе, а к третему фору, нужно сразу 2 счетчика? Почему?

T-sh 08.04.2012 00:11

да, только в третьем форе уже три счетчика (как у тебя в примере).

$i — первый счетчик для:

$chars[i] — первое "измерение" массива

$j — второй для:
$chars[i][j] — второе "измерение" массива

$k — третий
$chars[i][j][k] — третье "измерение" массива

выполняются они так:
$i = 0 : {
             $j = 0 : {
                           $k = 0;
                           $k = 1;
                           $k = 2;
                           ....
                           $k = 99999;
                         }
             $j = 1 : {
                           $k = 0;
                           $k = 1;
                           $k = 2;
                           ....
                           $k = 99999;
                         }
             $j = 2 : {
                           $k = 0;
                           $k = 1;
                           $k = 2;
                           ....
                           $k = 99999;
                         }
...
             $j = 9999 : {
                           $k = 0;
                           $k = 1;
                           $k = 2;
                           ....
                           $k = 99999;
                         }
}

$i = 1 : {
             $j = 0 : {
                           $k = 0;
                           $k = 1;
                           $k = 2;
                           ....
                           $k = 99999;
                         }
             $j = 1 : {
                           $k = 0;
                           $k = 1;
                           $k = 2;
                           ....
                           $k = 99999;
                         }
             $j = 2 : {
                           $k = 0;
                           $k = 1;
                           $k = 2;
                           ....
                           $k = 99999;
                         }
...
             $j = 9999 : {
                           $k = 0;
                           $k = 1;
                           $k = 2;
                           ....
                           $k = 99999;
                         }
}

$i = 2 : {
             $j = 0 : {
                           $k = 0;
                           $k = 1;
                           $k = 2;
                           ....
                           $k = 99999;
                         }
             $j = 1 : {
                           $k = 0;
                           $k = 1;
                           $k = 2;
                           ....
                           $k = 99999;
                         }
             $j = 2 : {
                           $k = 0;
                           $k = 1;
                           $k = 2;
                           ....
                           $k = 99999;
                         }
...
             $j = 9999 : {
                           $k = 0;
                           $k = 1;
                           $k = 2;
                           ....
                           $k = 99999;
                         }
}
....

kilogram 08.04.2012 01:00

Пишутся квадратные скобки во втором, третем форе и дальше - это означает что мы получаем доступ к вложенному массиву через его счетчик?

T-sh 08.04.2012 01:01

Цитата:

Сообщение от kilogram (Сообщение 167702)
Пишутся квадратные скобки во втором, третем форе и дальше - это означает что мы получаем доступ к вложенному массиву через его счетчик?

да

kilogram 08.04.2012 17:55

Доступ к внутреннему массиву в циклве фор, мы полчаем через индекс массива?

T-sh 08.04.2012 17:59

Цитата:

Сообщение от kilogram (Сообщение 167810)
Доступ к внутреннему массиву в циклве фор, мы полчаем через индекс массива?

ну естественно, без индекса предыдущего значения невозможно получить внутренние :)

смысл в этом:
сначала берем $chars[i=0] — смотрим, что у него внутри :)
натыкаемся на $chars[i=0][j=0] — смотрим также, что там у него есть :)
и обращаемся уже к $chars[i=0][j=0][k=0]; $chars[i=0][j=0][k=1] ... и т.д.
как закончились k, берем $chars[i=0][j=1] и в нем опять смотрим, что есть... как закончились j, берем $chars[i=1] и начинаем всё заново, пока у нас есть индексы )


Часовой пояс GMT +3, время: 13:31.