Какой самый простой способ создать 2d массив. Я надеялся, что смогу сделать что-то похожее на это:
declare int d[0..m, 0..n]
Какой самый простой способ создать 2d массив. Я надеялся, что смогу сделать что-то похожее на это:
declare int d[0..m, 0..n]
Вы также можете создать ассоциативный массив или массив с хэш-таблицей, указав индекс массива.
$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]';
Следующие эквиваленты и приводят к двумерному массиву:
$array = array(
array(0, 1, 2),
array(3, 4, 5),
);
или
$array = array();
$array[] = array(0, 1, 2);
$array[] = array(3, 4, 5);
Просто объявите? Вам не обязательно. Просто убедитесь, что переменная существует:
$d = array();
Массивы динамически изменяются, и попытка написать что-либо не-exsistant-элементу создает его (и при необходимости создает цельный массив)
$d[1][2] = 3;
Это допустимо для любого количества измерений без предшествующих объявлений.
Во-первых, 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
by $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()));
... и т.д...
Я получаю разочарование. Было бы неплохо иметь простой способ объявить инициализированный массив массивов любой глубиной, чтобы использовать, не проверяя или не бросая ошибки.
И для меня аргумент о том, должен ли массив быть разреженным или нет, зависит от контекста.
Например, если $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'
]
]
]
Ответ Атли действительно помог мне понять это. Вот пример того, как перебирать двумерный массив. В этом примере показано, как найти значения для известных имен массива, а также 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]