Как проще всего объявить двумерный массив в PHP?

Подобно :

declare int d[0..m, 0..n] 

Следующие эквиваленты и приводят к двумерному массиву:

 $array = array( array(0, 1, 2), array(3, 4, 5), ); 

или

 $array = array(); $array[] = array(0, 1, 2); $array[] = array(3, 4, 5); 

Вы также можете создать ассоциативный массив или массив с хэш-таблицей, указав индекс массива.

 $array = array( 0 => array( 'name' => 'John Doe', 'email' => 'john@example.com' ), 1 => array( 'name' => 'Jane Doe', 'email' => 'jane@example.com' ), ); 

Это эквивалентно

 $array = array(); $array[0] = array(); $array[0]['name'] = 'John Doe'; $array[0]['email'] = 'john@example.com'; $array[1] = array(); $array[1]['name'] = 'Jane Doe'; $array[1]['email'] = 'jane@example.com'; 

Просто объявите? Вам не обязательно. Просто убедитесь, что переменная существует:

 $d = array(); 

Массивы динамически изменяются, и попытка написать что-либо для элемента, отличного от exsistant, создает его (и при необходимости создает цельный массив)

 $d[1][2] = 3; 

Это справедливо для любого количества измерений без предшествующих объявлений.

Во-первых, PHP не имеет многомерных массивов, он имеет массивы массивов.

Во-вторых, вы можете написать функцию, которая сделает это:

 function declare($m, $n, $value = 0) { return array_fill(0, $m, array_fill(0, $n, $value)); } 

Или для больших массивов, все с одинаковым значением:

 $m_by_n_array = array_fill(0, $n, array_fill(0, $m, $value); 

создаст массив $m by $n со всем $value .

Для простого, «заполнить как вы идете» вид решения:

$foo = array(array());

Это даст вам гибкий псевдо-двумерный массив, который может содержать $ foo [ n ] [ n ], где n <= ∞ (конечно, ваш ограничивается обычными ограничениями объема памяти, но вы надеетесь, что я надеюсь). Это теоретически может быть расширено для создания как можно большего количества вспомогательных массивов.

Насколько мне известно, для этого нет встроенной функции php, вам нужно сделать это через цикл или с помощью настраиваемого метода, который рекурсивно вызывает нечто вроде array_fill, искаженное в ответе @Amber;

Я предполагаю, что вы имеете в виду создание пустого массива массивов. Например, вы хотите получить окончательные результаты, как показано ниже, из массива из 3 массивов :

  $final_array = array(array(), array(), array()); 

Это просто для простого кода, но для массива произвольного размера, такого как массив из 3 массивов из 3 массивов, он начинает получать сложную инициализацию перед использованием:

  $final_array = array(array(array(), array(), array()), array(array(), array(), array()), array(array(), array(), array())); 

…и т.д…

Я расстраиваюсь. Было бы неплохо иметь простой способ объявить инициализированный массив массивов любой глубиной для использования без проверки или метания ошибок.

И для меня аргумент о том, должен ли массив быть разреженным или нет, зависит от контекста.

Например, если $ a [6] [9] не заполняется, это эквивалент $ a [6] [9], заполняемый, например, символом "" или 0.

 $r = array("arr1","arr2"); 

для эха одного элемента массива, который вы должны написать:

 echo $r[0]; echo $r[1]; 

выход будет: arr1 arr2