使用重复 N 次的相同元素填充新数组

问题描述 投票:0回答:4

基本上我需要创建这个数组(给定 x = 3)

array('?','?','?');

我可以做

for ($i = 0; $i < 3; $i++)
    $arr[] = '?';

但它并不那么优雅。还有其他办法吗?

php arrays repeat
4个回答
29
投票

使用 array_fill(start_index, num, value ):

$arr = array_fill(0, 3, '?');

0
投票

为了解决如何将同一个元素多次推入数组的问题,值得注意的是,虽然

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'));

0
投票

这可能不是性能最好的(特别是当添加量很大时),但只是作为替代方案。

<?php
$foo = ['a'];
array_push($foo, ...array_fill(0, 3, 'b'));
print_r($foo);

会给出类似的东西:

Array
(
    [0] => a
    [1] => b
    [2] => b
    [3] => b
)

0
投票

为了完整起见,我将在此页面中添加

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)));
© www.soinside.com 2019 - 2024. All rights reserved.