Какой самый простой способ создать 2-мерный массив. Я надеялся, что смогу сделать что-то подобное:
declare int d[0..m, 0..n]
Вы также можете создать ассоциативный массив или массив, подобный «хеш-таблице», указав индекс массива.
$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';
Следующие примеры эквивалентны и приводят к двумерному массиву:
$array = array( array(0, 1, 2), array(3, 4, 5), );
или
$array = array(); $array[] = array(0, 1, 2); $array[] = array(3, 4, 5);
источник
Просто заявите? Вы не обязаны. Просто убедитесь, что переменная существует:
$d = array();
Размер массивов изменяется динамически, и попытка записать что-либо в несуществующий элемент создает его (и при необходимости создает весь массив)
$d[1][2] = 3;
Это действительно для любого количества размеров без предварительного объявления.
источник
count
правильное измерение, напримерcount($d[1])
, если я не понимаю вашу точку зрения?Во-первых, в PHP нет многомерных массивов, в нем есть массивы массивов.
Во-вторых, вы можете написать функцию, которая будет это делать:
function declare($m, $n, $value = 0) { return array_fill(0, $m, array_fill(0, $n, $value)); }
источник
Для простого решения типа "заполнять по ходу":
$foo = array(array());
Это даст вам гибкий псевдодвумерный массив, который может содержать $ foo [ n ] [ n ], где n <= ∞ (конечно, вы ограничены обычными ограничениями на размер памяти, но, надеюсь, вы поняли идею). Теоретически это можно расширить, чтобы создать столько подмассивов, сколько вам нужно.
источник
Или для больших массивов, все с одинаковым значением:
$m_by_n_array = array_fill(0, $n, array_fill(0, $m, $value);
будет создать с
$m
помощью$n
массива со всем набором к$value
.источник
Насколько мне известно, для этого нет встроенной функции 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()));
...так далее...
Я разочарован. Было бы неплохо иметь простой способ объявить инициализированный массив массивов любой глубины для использования без проверки или выдачи ошибок.
источник
Ответ Атли действительно помог мне понять это. Вот пример того, как перебирать двумерный массив. В этом примере показано, как найти значения для известных имен массива, а также 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
источник
И для меня аргумент о том, должен ли массив быть разреженным или нет, зависит от контекста.
Например, если $ a [6] [9] не заполнено, это эквивалентно заполнению $ a [6] [9], например, "" или 0.
источник
$r = array("arr1","arr2");
чтобы отобразить один элемент массива, вы должны написать:
echo $r[0]; echo $r[1];
вывод будет:
arr1 arr2
источник
А мне так нравится:
$cars = array ( array("Volvo",22), array("BMW",15), array("Saab",5), array("Land Rover",17) );
источник
Если вы хотите быстро создать многомерный массив для простого значения с помощью одного лайнера, я бы рекомендовал использовать эту библиотеку массивов, чтобы сделать это следующим образом:
$array = Arr::setNestedElement([], '1.2.3', 'value');
который будет производить
[ 1 => [ 2 => [ 3 => 'value' ] ] ]
источник
Вы можете попробовать это, но значения второго измерения будут равны индексам:
$array = array_fill_keys(range(0,5), range(0,5));
немного сложнее для пустого массива:
$array = array_fill_keys(range(0, 5), array_fill_keys(range(0, 5), null));
источник
Вам нужно объявить массив в другом массиве.
$arr = array(array(content), array(content));
Пример:
$arr = array(array(1,2,3), array(4,5,6));
Чтобы получить первый элемент из массива, вы будете использовать его
$arr[0][0]
, как первый элемент из первого массива из массива.$arr[1][0]
вернет первый элемент из второго массива из массива.источник