如何最简单地创建一个二维数组?我希望能够做类似于这样的事情:
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])
,除非我误解了你的意思? - DisgruntledGoat首先,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$。
atli的回答真的帮助我理解了这个问题。下面是如何迭代遍历一个二维数组的示例。该示例展示了如何查找数组中已知名称的值以及使用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
$final_array = array(array(), array(), array());
这个可以手动编写,但对于像三个三维数组这样大小任意的数组,在使用前初始化就开始变得复杂了:
$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
。