我想提供一个0到59的列表,数字0到9的前导零。这是我的代码,但它到目前为止还不起作用。解决方案是什么?
for ($i=0; $i<60; $i++){
if ($i< 10){
sprintf("%0d",$i);
}
array_push($this->minutes, $i);
}
答案 0 :(得分:14)
使用%02d
要短得多,只在必要时填充字符串:
for($i=0; $i<60; $i++){
array_push($this->minutes,sprintf("%02d",$i));
}
答案 1 :(得分:4)
您没有将sprintf
的结果分配给任何变量。
尝试
$padded = sprintf("%0d", $i);
array_push($this->minutes, $padded);
请注意,sprintf对$i
没有任何作用。它只是使用$i
生成一个字符串,但不会对其进行修改。
编辑:此外,如果您使用%02d
,则不需要if
答案 2 :(得分:3)
试试这个......
for ($i = 0; $i < 60; $i++) {
if ($i < 10) {
array_push($this->minutes, sprintf("%0d", $i));
}
array_push($this->minutes, $i);
}
您忽略了sprintf的返回值,而不是将其推入您的数组......
重要:您使用的方法会导致数组中的某些项成为字符串,有些是整数。这可能没关系,但是如果你不期待它可能会咬你的屁股......
答案 3 :(得分:2)
使用str_pad:
for($i=0; $i<60; $i++){
str_pad($i, 2, "0", STR_PAD_LEFT)
}
答案 4 :(得分:1)
我喜欢提供的解决方案,但我想在没有故意for
/ foreach
循环的情况下完成。所以,这里有三个解决方案(细微变化):
$array = array_map(custom_sprintf, range(0,59));
//print_r($array);
function custom_sprintf($s) {
return sprintf("%02d", $s);
}
$array = range(0,59);
array_walk($array, create_function('&$v', '$v = sprintf("%02d", $v);'));
// print_r($array);
$array = array_map(create_function('&$v', 'return sprintf("%02d", $v);'), range(0,59));