PHP中的前导零

5
我想展示一个从0到59的列表,其中数字0到9具有前导零。这是我的代码,但目前它无法正常工作。有什么解决方案吗?
for ($i=0; $i<60; $i++){
    if ($i< 10){      
        sprintf("%0d",$i);
    }
    array_push($this->minutes, $i);
}

1
检测到缺乏调试。sanders,这种问题可以通过调试来解决。 - Your Common Sense
5个回答

14

使用 %02d 更简洁,只会在必要时填充字符串:

for($i=0; $i<60; $i++){
   array_push($this->minutes,sprintf("%02d",$i));
}

4

您没有将 sprintf 的结果分配给任何变量。

尝试:

$padded = sprintf("%0d", $i);
array_push($this->minutes, $padded); 

请注意,sprintf不会对$i进行任何操作。它只是使用$i生成一个字符串,但不会修改它。
编辑:如果您使用%02d,则不需要if

3

试试这个...

for ($i = 0; $i < 60; $i++) {
    if ($i < 10) {
        array_push($this->minutes, sprintf("%0d", $i));
    }
    array_push($this->minutes, $i);
}

你忽略了sprintf的返回值,而不是将其推入数组中...
重要提示:你所使用的方法会导致数组中的某些项为字符串,而另一些项为整数。这可能无关紧要,但如果你没有预料到这一点,可能会给你带来麻烦...

2

使用str_pad函数:

for($i=0; $i<60; $i++){
    str_pad($i, 2, "0", STR_PAD_LEFT)
}

1

我喜欢提供的解决方案,但我想不使用故意的for/foreach循环来完成。因此,这里有三个解决方案(微妙的变化):

使用带有设计回调函数的array_map()

$array = array_map(custom_sprintf, range(0,59));
//print_r($array);

function custom_sprintf($s) {
    return sprintf("%02d", $s);
}

使用带有内联create_function()调用的array_walk()函数
$array = range(0,59);
array_walk($array, create_function('&$v', '$v = sprintf("%02d", $v);'));
// print_r($array);

使用array_map()和create_function()进行一些代码高尔夫魔法

$array = array_map(create_function('&$v', 'return sprintf("%02d", $v);'), range(0,59));

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接