Код (Text): <html><body> <?php ## Печать всей таблицы ASCII-символов. // Сначала создаем массив того, что мы собираемся выводить, // не заботясь о форматировании (дизайне) информации for ($i=0,$x=0; $x<16; $x++) { for ($y=0; $y<16; $y++) { $chars[$x][$y] = array($i, chr($i)); $i++; } } // Теперь выводим накопленную информацию, используя идеологию // вставки участков кода в HTML-документ ?> <table border=1 cellpadding=3 cellspacing=0> <? foreach ($chars as $row) {?> <tr> <? foreach ($row as $cell) { ?> <td> <?=$cell[0]?>: <b><tt><?=$cell[1]?></tt></b> </td> <? }?> </tr> <? }?> </table> </body></html> Как работает вывод двумерного ассоциативного массива в этом коде? $chars[$x][$y] = array($i, chr($i)); - здесь каждому элементу созданного массива $chars присваиватся значение результата анонимного вызова массива array без имени?
$chars - это массив, каждый элемент которого (все значения $x) - является также массивами, содержащие элементы $y. И эти элементы $y - тоже являются массивами, содержащими по 2 значения ($i и chr($i)). $chars - трёхмерный массив.
$chars[$x][$y] = array($i, chr($i)); array($i, chr($i)); - это значения с вызова анонимного массива присваиваются массиву $chars? Разве здесь трехмерный массив?
array() - это конструкция языка. Она создаёт новый массив и возвращает его вызвавшей инструкции. Подробнее здесь: http://www.php.ru/manual/function.array.html $chars - это массив, состоящий из $x элементов. Каждый $chars[$x] - это массив, состоящий из $y элементов. Каждый $chars[$x][$y] - это массив состоящий из 2-х элементов. Структура твоего массива примерно такая получается: Код (PHP): $chars = array( 1 => array( 1 => array( $i, chr($i) ), 2 => array( $i, chr($i) ), // ... ), 2 => array( 1 => array( $i, chr($i) ), 2 => array( $i, chr($i) ), // ... ), // ... ); Возьми книжку по PHP, открой главу про массивы и прочитай от предисловия до упражнений для закрепления пройденного материала (включительно).
Прочитал про массивы, меня просто смутило что без названия присваивается правая часть левой в этом месте. Код (Text): $chars[$x][$y] = array($i, chr($i)); Если возьмем первую итерацию в этом цикле, получается первому элементу под номером $chars[0][0] присваивается ещё один массив(в котором внутри 2 элемента с их значеними)? Каким образом получается трехмерный в данном случае?
$chars[0][0][0] - чтобы получить $i для x=0 и y=0 $chars[0][0][1] - чтобы получить chr($i) для x=0 и y=0
Попробовал написать так: Код (Text): for ($i=0,$x=0; $x<1; $x++) { for ($y=0; $y<1; $y++) { $chars[$x][$y] = array($i, chr($i)); var_dump($chars); $i++; } } Вывелось такое: Код (Text): array( 0=> array( 0=> array( 0=> int(0) 1=> string(1) "" ) ) ) Код (Text): Получается массив с одного элемента, который содержит ещё один массив, который также состоит с одного элемента, а этот элемент содержит ещё один массив который состоит из двух элементов?
На первой итерации - да. Дальше количество элементов как самого массива $chars, так и каждого $chars[0], $chars[1], ... - будет расти
То оесть после присвоения первому элементу массива $chars[0][0] ----> массива array($i, chr($i)); после этого этот двумерный прверащается в трехмерный и все остальные итерации уже идут с трехмерным, хотя первая итерация была с двумерным?
Обычно в книгах все описывается как что работает, дают пример и его подробно объясняют... А что ты читаешь? И еще вопрос, так для интереса, это твой первый язык?
Читаю Котова, ПХП5, немного читал раньше С++ и Яву, ну так в ознакомительных целях его использовал. И все же, ответьте на мой вопрос.
Я правда не читал Котова, но думаю там есть ответ на твой вопрос... После присвоения выполни print_r($chars); и посмотри... и ты сам все увидишь И так информация к размышлению... попробуй дочитать книгу до конца, если что-то не понятно перечитай если все равно не понятно прочитай в другой книге, так все делают... Не надо зацикливаться на 1 книге