基本上我需要创建这个数组(给定 x = 3)
array('?','?','?');
我可以做
for ($i = 0; $i < 3; $i++)
$arr[] = '?';
但它并不那么优雅。还有其他办法吗?
使用 array_fill(start_index, num, value ):
$arr = array_fill(0, 3, '?');
为了解决如何将同一个元素多次推入数组的问题,值得注意的是,虽然
array_fill()
无疑是生成新数组的最优雅的选择,但这是它唯一能做的事情。它实际上无法将元素推送到现有数组上。
因此,虽然基本循环并不是特别令人兴奋,但在您想要添加现有数组的情况下,它确实可以很好地工作,无论它是否已经为空。
$arr = ['a', 'a', 'a'];
for ($i = 0; $i < 3; $i++) {
$arr[] = 'b';
}
print_r($arr);
Array
(
[0] => a
[1] => a
[2] => a
[3] => b
[4] => b
[5] => b
)
要使用
array_fill()
实现相同的效果,需要进行额外的合并:
$arr = array_merge($arr, array_fill(0, 3, 'b'));
这可能不是性能最好的(特别是当添加量很大时),但只是作为替代方案。
<?php
$foo = ['a'];
array_push($foo, ...array_fill(0, 3, 'b'));
print_r($foo);
会给出类似的东西:
Array
(
[0] => a
[1] => b
[2] => b
[3] => b
)
为了完整起见,我将在此页面中添加
array_pad()
也可以使用(但我更喜欢用 array_fill()
“填充”数组的语义)。当一个函数可以调用时,我不会选择调用两个函数,但是 str_split(str_repeat())
提供了相同的效果。
具有相同输出的代码:(Demo)
var_export(array_pad([], 3, '?'));
var_export(array_fill(0, 3, '?'));
var_export(str_split(str_repeat('?', 3)));