Ответ 1
В абсолютном простейшем случае 2D-мерный массив может быть создан как:
<?php
$emptyArray = array(array());
?>
Или с PHP 5.4 вы также можете использовать:
<?php
$emptyArray = [[]];
?>
Я знаю, что массивы создаются динамически, а создание их заблаговременно не обязательно, но как это сделать с 2D-массивом? Точно так же?
(for$j)
{
for($i)
{
$array[j][i] = "data";
}
}
Что-то вроде этого? Разумеется, реальный для циклов, конечно.
В абсолютном простейшем случае 2D-мерный массив может быть создан как:
<?php
$emptyArray = array(array());
?>
Или с PHP 5.4 вы также можете использовать:
<?php
$emptyArray = [[]];
?>
Вы не создаете 2d-массив в PHP, а не в традиционном смысле.
Предложения выше о $a = array(array());
фактически просто создают следующий массив:
$a = array(
0 => array( )
);
Следовательно, $a[0][0] = 'test';
приведет к следующему:
$a = array(
0 => array(
0 => 'test'
)
);
На первый взгляд, похоже, что он работает, но на самом деле это все еще не 2d-массив. Когда вы пытаетесь использовать 2-ю строку (индекс 1), в этот момент PHP выкинет уведомление. Например:
$a[1][0] = 'test2';
Это связано с тем, что $a[1]
не содержит ничего (помните, что array(array())
просто создает массив с индексом 0?).
Чтобы он работал, вам нужно еще раз сделать $a[1] = array();
, или если вы хотите избежать индексов, которые вы можете сделать, $a[] = array();
.
Пример
$a = array(); // array of columns
for($c=0; $c<5; $c++){
$a[$c] = array(); // array of cells for column $c
for($r=0; $r<3; $r++){
$a[$c][$r] = rand();
}
}
Вышеприведенный код создает 5x3 "2d-массив" случайных чисел.
Документация PHP всегда является хорошим способом начать работу с такими основными вопросами.
<?php
$arr = array("somearray" => array(6 => 5, 13 => 9, "a" => 42));
echo $arr["somearray"][6]; // 5
echo $arr["somearray"][13]; // 9
echo $arr["somearray"]["a"]; // 42
?>
Не могли бы вы указать, что вы пытаетесь сделать? Вы можете прокручивать многомерные массивы с помощью функции foreach
$ary=array( "subarr" => array("foo","bar") );
foreach($ary as $a){
foreach($a as $ary_sub){
echo $ary_sub;
}
}
или
foreach($ary["subarr"] as $key=>$subval){
echo $subval;
}
Если я хочу создать пустой массив для обработки строк из текстовых файлов, я просто использую $array = array();
Использование "array (array())" создаст 2D-массив с "пустым" элементом в первой позиции. Чтобы создать по-настоящему пустой 2D-массив, это нужно удалить.
<?php
$emptyArray = array(array()); // Creates a 2D array with one empty element in $emptyArray[0]
array_pop($emptyArray); // Pops element[0] off the array
?>
// dynamic 2D array
$twoD = array(array());
$val = 0;
// fill the array
for($r = 0; $r < 4; $r++) {
for($c = 0; $c < 4; $c++)
$twoD[$r][$c] = $val++;
}
// print the current value of $val
echo $val."<br/>------------------<br/>";
// print the array
for($r = 0; $r < 4; $r++) {
for($c = 0; $c < 4; $c++)
echo $twoD[$r][$c];
echo "<br/>";
}
Помните, что всякий раз, когда вы используете вложенную функцию array(array())
или синтаксис короткого массива [[]]
оба создают 2D-массив с empty
элементом в первой позиции. Это может привести к некоторым ошибкам, поэтому мы должны удалить его.
empty
элемент? Ну, это абсолютно просто, как вызов array_pop()
для array_pop()
element[0]
из массива, как это:
<?php
$a = array(array());
echo 'Before removing the empty element: \n'
print_r($a);
array_pop($a);
print_r($a);
$b = [[]];
echo 'Before removing the empty element: \n'
print_r($b);
array_pop($b);
print_r($b);
?>