Вы не создаете 2d-массив в PHP, не в традиционном смысле.
Приведенные выше предложения о $a = array(array());
на самом деле просто создают следующий массив:
$a = array(
0 => array( )
);
Таким образом, $a[0][0] = 'test';
приведет к следующему:
$a = array(
0 => array(
0 => 'test'
)
);
На первый взгляд, похоже, что это работает, но на самом деле это еще не двумерный массив.Когда вы попытаетесь использовать вторую строку (индекс 1), в этот момент PHP выдаст уведомление.Например:
$a[1][0] = 'test2';
Это потому, что $a[1]
ничего не содержит (помните, что array(array())
просто создает массив с индексом 0?).
Чтобы это работало, вам нужночтобы снова сделать $a[1] = array();
, или, если вы хотите избежать индексов, которые вы можете сделать, $a[] = array();
.
Пример
$a = array(); // array of columns
for($c=0; $c<5; $c++){
$a[$c] = array(); // array of cells for column $c
for($r=0; $r<3; $r++){
$a[$c][$r] = rand();
}
}
ВышеКод создает 5x3 «2d массив» случайных чисел.