使用通过将一系列数字连接到静态字符串而形成的值填充数组
Populate array with values formed by concatenating a range of numbers to a static string
我想创建一个生成元素数组的函数,该数组由附加到静态 string/prefix 的递增数字组成,如下所示:
$arr = [
'file1',
'file2',
'file3',
'file4',
'file5',
];
我知道我可以创建一个像这样的简单循环:
$arr = [];
for( $i = 1; $i <= 5; $i ++ ){
$arr[] = 'file' . $i;
}
但是思路是给出参数$text = file
、$start = 1
、$elements = 5
和可选的$step = 1
并使用内置的php函数来实现它。
我试过类似的方法:
$arr = array_merge( array_fill( 0, 5, 'file' ), range( 1, 5, 1 ) );
但是我从那个那里得到了
$arr = [
"file",
"file",
"file",
"file",
"file",
0,
1,
2,
3,
4,
5,
];
你快到了。您可以通过 range
生成数组,然后通过 array_map
添加 file
,如下所示:
<?php
$arr = array_map(fn($e) => 'file'. $e,range(1,5));
print_r($arr);
如果你想保持你的 beginner-friendly 和可读的语法,你可以像这样简单地修改你的代码:
$arr = [];
for( $i = $start; $i < $start + ($elements * $step); $i += $step ){
$arr[] = $text . $i;
}
编辑:如果您的变量来自用户输入,请小心:负数 $step
可能会导致无限循环。
如果你想给那些参数,那么我相信你正在考虑编写一个函数。在函数中一个for循环应该可以实现你想要的。
function heaven_knows_why($text, $start, $elements, $step = 1)
{
$arr = [];
for( $i = $start, $j=1, $s=$start; $j <= $elements; $j++, $i++, $s += $step ){
$arr[] = $text . $s;
}
return $arr;
}
print_r(heaven_knows_why('duh', 1, 5));
print_r(heaven_knows_why('duh', 1, 5, 2));
结果
Array
(
[0] => duh1
[1] => duh2
[2] => duh3
[3] => duh4
[4] => duh5
)
Array
(
[0] => duh1
[1] => duh3
[2] => duh5
[3] => duh7
[4] => duh9
)
您可以使用参数选择功能样式或经典循环方法。我在 map()
和 whileloop()
中使用相同的等式来确定范围的结束并避免使用额外的计数器变量。 forloop()
函数更容易理解,但必须维护一个额外的变量,该变量必须递增才能获得正确的元素数量。 (Demo)
function map($text = 'file', $elements = 5, $start = 1, $step = 1) {
$end = $start + $elements * $step - 1;
return array_map(
fn($i) => $text . $i,
range($start, $end, $step)
);
}
或
function whileloop($text = 'file', $elements = 5, $start = 1, $step = 1) {
$result = [];
$end = $start + $elements * $step - 1;
while ($start <= $end) {
$result[] = $text . $start;
$start += $step;
}
return $result;
}
或
function forloop($text = 'file', $elements = 5, $start = 1, $step = 1) {
$result = [];
for ($i = 0; $i < $elements; ++$i, $start += $step) {
$result[] = $text . $start;
}
return $result;
}
我想创建一个生成元素数组的函数,该数组由附加到静态 string/prefix 的递增数字组成,如下所示:
$arr = [
'file1',
'file2',
'file3',
'file4',
'file5',
];
我知道我可以创建一个像这样的简单循环:
$arr = [];
for( $i = 1; $i <= 5; $i ++ ){
$arr[] = 'file' . $i;
}
但是思路是给出参数$text = file
、$start = 1
、$elements = 5
和可选的$step = 1
并使用内置的php函数来实现它。
我试过类似的方法:
$arr = array_merge( array_fill( 0, 5, 'file' ), range( 1, 5, 1 ) );
但是我从那个那里得到了
$arr = [
"file",
"file",
"file",
"file",
"file",
0,
1,
2,
3,
4,
5,
];
你快到了。您可以通过 range
生成数组,然后通过 array_map
添加 file
,如下所示:
<?php
$arr = array_map(fn($e) => 'file'. $e,range(1,5));
print_r($arr);
如果你想保持你的 beginner-friendly 和可读的语法,你可以像这样简单地修改你的代码:
$arr = [];
for( $i = $start; $i < $start + ($elements * $step); $i += $step ){
$arr[] = $text . $i;
}
编辑:如果您的变量来自用户输入,请小心:负数 $step
可能会导致无限循环。
如果你想给那些参数,那么我相信你正在考虑编写一个函数。在函数中一个for循环应该可以实现你想要的。
function heaven_knows_why($text, $start, $elements, $step = 1)
{
$arr = [];
for( $i = $start, $j=1, $s=$start; $j <= $elements; $j++, $i++, $s += $step ){
$arr[] = $text . $s;
}
return $arr;
}
print_r(heaven_knows_why('duh', 1, 5));
print_r(heaven_knows_why('duh', 1, 5, 2));
结果
Array
(
[0] => duh1
[1] => duh2
[2] => duh3
[3] => duh4
[4] => duh5
)
Array
(
[0] => duh1
[1] => duh3
[2] => duh5
[3] => duh7
[4] => duh9
)
您可以使用参数选择功能样式或经典循环方法。我在 map()
和 whileloop()
中使用相同的等式来确定范围的结束并避免使用额外的计数器变量。 forloop()
函数更容易理解,但必须维护一个额外的变量,该变量必须递增才能获得正确的元素数量。 (Demo)
function map($text = 'file', $elements = 5, $start = 1, $step = 1) {
$end = $start + $elements * $step - 1;
return array_map(
fn($i) => $text . $i,
range($start, $end, $step)
);
}
或
function whileloop($text = 'file', $elements = 5, $start = 1, $step = 1) {
$result = [];
$end = $start + $elements * $step - 1;
while ($start <= $end) {
$result[] = $text . $start;
$start += $step;
}
return $result;
}
或
function forloop($text = 'file', $elements = 5, $start = 1, $step = 1) {
$result = [];
for ($i = 0; $i < $elements; ++$i, $start += $step) {
$result[] = $text . $start;
}
return $result;
}