Как мне объявить двумерный массив? - PullRequest
83 голосов
/ 28 ноября 2009

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

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

Ответы [ 12 ]

78 голосов
/ 28 ноября 2009

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

$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';
63 голосов
/ 28 ноября 2009

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

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

или

$array = array();

$array[] = array(0, 1, 2);
$array[] = array(3, 4, 5);
35 голосов
/ 28 ноября 2009

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

$d = array();

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

$d[1][2] = 3;

Это действительно для любого количества размеров без предварительных деклараций.

26 голосов
/ 28 ноября 2009

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

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

function declare($m, $n, $value = 0) {
  return array_fill(0, $m, array_fill(0, $n, $value));
}
11 голосов
/ 19 ноября 2011

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

$foo = array(array());

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

8 голосов
/ 28 ноября 2009

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

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

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

3 голосов
/ 11 июля 2017
$r = array("arr1","arr2");

для вывода одного элемента массива вы должны написать:

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

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

2 голосов
/ 12 июля 2015

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

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

2 голосов
/ 14 октября 2014

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

... и т.д ...

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

0 голосов
/ 09 марта 2019

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

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

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 john@example.com
. field 0 is John Doe
. field 1 is john@example.com
hi element 1
. name is Jane Doe
. email is jane@example.com
. field 0 is Jane Doe
. field 1 is jane@example.com
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...