2

在我的代码中,我需要制作多个虚拟数组的副本。数组很简单,例如$dummy = array('val'=> 0). 我想制作这个数组的 N 个副本,并将它们附加到具有类似结构的现有数组的末尾。显然,这可以通过 for 循环来完成,但为了便于阅读,我想知道是否有任何内置函数会使这变得更加冗长。

这是我使用 for 循环提出的代码:

//example data, not real code
$existingArray = array([0] => array('val'=>2),[1] => array('val'=>3) );

$n = 2;
for($i=0;$i<$n;$i++) {
   $dummy = array('val'=>0); //make a new array
   $existingArray[] = $dummy; //add it to the end of $existingArray
}

重申一下,如果存在这样的函数,我想用函数重写它。与此类似的东西(显然这些不是真正的功能):

//make $n copies of the array
$newvals = clone(array('val'=>0), $n);

//tack the new arrays on the end of the existing array
append($newvals, $existingArray)
4

1 回答 1

5

我想你正在寻找array_fill

array array_fill ( int $start_index , int $num , mixed $value )

num用参数值的条目填充数组value,键从start_index参数开始。

所以:

$newElements = array_fill(0, $n, Array('val' => 0));

您仍然必须处理对$newElements自己的附加$existingArray,可能使用array_merge

array array_merge ( array $array1 [, array $... ] )

将一个或多个数组的元素合并在一起,以便将一个数组的值附加到前一个数组的末尾。它返回结果数组。

如果输入数组具有相同的字符串键,则该键的后一个值将覆盖前一个。但是,如果数组包含数字键,则后面的值不会覆盖原始值,而是会被追加。

带有数字键的输入数组中的值将使用从结果数组中的零开始的递增键重新编号。

所以:

$existingArray = array_merge($existingArray, $newElements);

这一切都有效,因为您的顶级数组是数字索引的。

于 2013-02-19T17:40:20.113 回答