PHP中的前导零

时间:2010-06-06 17:30:24

标签: php

我想提供一个0到59的列表,数字0到9的前导零。这是我的代码,但它到目前为止还不起作用。解决方案是什么?

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

5 个答案:

答案 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_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));