【发布时间】:2010-12-21 03:10:18
【问题描述】:
创建二维数组的最简单方法是什么。我希望能够做类似的事情:
declare int d[0..m, 0..n]
【问题讨论】:
创建二维数组的最简单方法是什么。我希望能够做类似的事情:
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);
将通过$n 创建一个$m 数组,并将所有内容设置为$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
【讨论】:
据我所知,没有内置的 php 函数可以执行此操作,您需要通过循环或自定义方法来执行此操作,该方法递归调用 @Amber 在答案中指示的 array_fill 之类的东西;
我假设您的意思是创建了一个空但已初始化的数组数组。例如,您想要一个类似于下面的 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 library 来执行此操作:
$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],这类似于数组中first 数组中的第一项。
$arr[1][0] 将返回数组中 second 数组中的第一项。
【讨论】: