例如,我有一个包含N
元素的数组,我需要它有M
个元素,其中M
是O
的倍数。例如:
[signature: array array_fill_multiple(array, int o, mixed filler = null)]
$array = [ 1, 2 ];
array_fill_multiple($array, 1); // => [ 1, 2 ]
array_fill_multiple($array, 2); // => [ 1, 2 ]
array_fill_multiple($array, 3); // => [ 1, 2, null ]
array_fill_multiple($array, 4); // => [ 1, 2, null, null ]
$array = [ 1, 2, 3 ];
array_fill_multiple($array, 1); // => [ 1, 2, 3 ]
array_fill_multiple($array, 2); // => [ 1, 2, 3, null ]
array_fill_multiple($array, 3); // => [ 1, 2, 3 ]
array_fill_multiple($array, 4); // => [ 1, 2, 3, null ]
$array = [ 1, 2, 3, 4 ];
array_fill_multiple($array, 5, 0); // => [ 1, 2, 3, 4, 0 ]
我可以用for
来做,但我想使用原生方法是可能的,不是吗?
修改
为了更好地解释我想要的东西,它需要产生一个具有O
个元素倍数的数组。因此,如果我喜欢这个数组包含5的倍数,那么它需要产生一个包含0,5,10,15,20,25 ......元素的数组(包括零,如果为空)。
我想array_pad()
会有所帮助。只需要根据数组计算计算第二个参数,以了解O
的下一个倍数。
答案 0 :(得分:1)
基本上你只需将“array_fill_multiple”替换为“array_pad”,它就会起作用:)
$array = [ 1, 2 ];
array_pad($array, 1, null); // => [ 1, 2 ]
array_pad($array, 2, null); // => [ 1, 2 ]
array_pad($array, 3, null); // => [ 1, 2, null ]
array_pad($array, 4, null); // => [ 1, 2, null, null ]
$array = [ 1, 2, 3 ];
array_pad($array, 1, null); // => [ 1, 2, 3 ]
array_pad($array, 2, null); // => [ 1, 2, 3, null ]
array_pad($array, 3, null); // => [ 1, 2, 3 ]
array_pad($array, 4, null); // => [ 1, 2, 3, null ]
$array = [ 1, 2, 3, 4 ];
array_pad($array, 5, 0); // => [ 1, 2, 3, 4, 0 ]
答案 1 :(得分:1)
像这样的东西
$a = [1, 2, 3];
$multiple = 5;
$size = sizeof($a);
// first way
var_dump(array_pad($a, ceil($size / $multiple) * $multiple, null));
// second way
var_dump(array_pad($a, $size + ($size % $multiple ? $multiple - $size % $multiple : 0), null));
第二个比第一个更准确。假设你有一个包含10000000000000001个项目的数组(在64系统上)。现在你必须用乘法器11填充。
$size = 10000000000000001 * 11;
$multiple = 11;
var_dump($size);
// int(110000000000000011)
// first way
ini_set('precision', 18);
var_dump(ceil($size / $multiple) * $multiple);
// double(110000000000000000)
// second way
var_dump($size + ($size % $multiple ? $multiple - $size % $multiple : 0));
// int(110000000000000011)
现在您看到第一种方法产生错误的值,因为浮点值的精度低于int。