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

Какой самый простой способ создать 2d массив. Я надеялся, что смогу сделать что-то похожее на это:

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

Ответ 1

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

$array = array(
    0 => array(
        'name' => 'John Doe',
        'email' => '[email protected]'
    ),
    1 => array(
        'name' => 'Jane Doe',
        'email' => '[email protected]'
    ),
);

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

$array = array();

$array[0] = array();
$array[0]['name'] = 'John Doe';
$array[0]['email'] = '[email protected]';

$array[1] = array();
$array[1]['name'] = 'Jane Doe';
$array[1]['email'] = '[email protected]';

Ответ 2

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

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

или

$array = array();

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

Ответ 3

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

$d = array();

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

$d[1][2] = 3;

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

Ответ 4

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

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

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

Ответ 5

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

$foo = array(array());

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

Ответ 6

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

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

создаст массив $m by $n со значением, установленным на $value.

Ответ 7

Насколько я знаю, для этого нет встроенной функции 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()));

... и т.д...

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

Ответ 8

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

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

Ответ 9

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

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

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

: arr1 arr2

Ответ 10

И мне нравится этот способ:

$cars = array
  (
  array("Volvo",22),
  array("BMW",15),
  array("Saab",5),
  array("Land Rover",17)
  );

Ответ 11

Если вы хотите быстро создать многомерный массив для простого значения, используя одну строку, я бы порекомендовал использовать эту библиотеку массивов, чтобы сделать это так:

$array = Arr::setNestedElement([], '1.2.3', 'value');

который будет производить

[
  1 => [
    2 => [
      3 => 'value'
    ]
  ]
]

Ответ 12

Ответ Атли действительно помог мне понять это. Вот пример того, как перебирать двумерный массив. В этом примере показано, как найти значения для известных имен массива, а также foreach, в котором вы просто просматриваете все поля, которые там найдете. Надеюсь, это кому-нибудь поможет.

$array = array(
    0 => array(
        'name' => 'John Doe',
        'email' => '[email protected]'
    ),
    1 => array(
        'name' => 'Jane Doe',
        'email' => '[email protected]'
    ),
);

foreach ( $array  as $groupid => $fields) {
    echo "hi element ". $groupid . "\n";
    echo ". name is ". $fields['name'] . "\n";
    echo ". email is ". $fields['email'] . "\n";
    $i = 0;
    foreach ($fields as $field) {
         echo ". field $i is ".$field . "\n";
        $i++;
    }
}

Выходы:

hi element 0
. name is John Doe
. email is [email protected]
. field 0 is John Doe
. field 1 is [email protected]
hi element 1
. name is Jane Doe
. email is [email protected]
. field 0 is Jane Doe
. field 1 is [email protected]