PHP使用函数制作N个数组副本

时间:2013-02-19 17:39:20

标签: php arrays multidimensional-array

在我的代码中,我需要制作一个虚拟数组的许多副本。数组很简单,例如$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)

1 个答案:

答案 0 :(得分: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);

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