PHP的str_pad()和数字的奇怪行为

时间:2013-09-16 15:59:43

标签: php

$caseid(通常)是一个5位数字(可能更低)。我想要一个前导0,这个数字是6位数:

<?php
$caseid=12345;
echo str_pad(strval($caseid), 6-strlen(strval($caseid)), '0', STR_PAD_LEFT); ?>

这不能按预期工作(显示相同的数字)。相反,如果我向str_pad的第二个参数添加5,它就可以工作。

<?php echo str_pad(strval($caseid), 11-strlen(strval($caseid)), '0', STR_PAD_LEFT); ?>

有效。这里有什么错误?

3 个答案:

答案 0 :(得分:6)

您不需要计算您想要的总字符数的差异。

str_pad(strval($caseid), 6, '0', STR_PAD_LEFT);

答案 1 :(得分:1)

我曾被str_pad()的行为所困扰。我厌倦了它,然后又回到了旧稳定的sprintf()

<?php
header('Content-Type: text/plain');

$test = [
     1,
     12,
     123,
     1234,
     12345,
     123456
];

foreach($test as $n){
    echo sprintf('%06d' . PHP_EOL, $n);
}
?>

结果:

000001
000012
000123
001234
012345
123456

也许,这不是一个答案,但我希望它可以帮到某个人。

答案 2 :(得分:0)

参见函数原型:

string str_pad (
        string $input , 
        int $pad_length 
        [, string $pad_string = " " 
        [, int $pad_type = STR_PAD_RIGHT ]]

Pad a string to a certain length with another string,$ pad_length表示您想要的长度。

str_pad in php.net