在我的代码中,我需要制作一个伪数组的多个副本。数组很简单,例如$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)
我想您正在寻找array_fill
:
array array_fill ( int $start_index , int $num , mixed $value )
用
value
参数值的num
条目填充数组,这些关键字从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);
这一切都是有效的,因为您的顶级数组是数字索引的。