Какой самый простой способ создать 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 <= ∞ (конечно, вы ограничены обычными ограничениями на размер памяти, но, надеюсь, вы поняли идею). Теоретически это можно расширить, чтобы создать столько подмассивов, сколько вам нужно.
Насколько мне известно, для этого нет встроенной функции 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
Если вы хотите быстро создать многомерный массив для простого значения с помощью одного лайнера, я бы рекомендовал использовать эту библиотеку массивов, чтобы сделать это следующим образом:
$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]вернет первый элемент из второго массива из массива.