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

PHP的奇怪行为';s str_pad()和数字,php,Php,$caseid通常是一个5位数字(可能更低)。我需要一个前导0,以便数字长度为6位: <?php $caseid=12345; echo str_pad(strval($caseid), 6-strlen(strval($caseid)), '0', STR_PAD_LEFT); ?> 它起作用了。这里的错误是什么?您不需要计算差异,只需输入所需的字符总数即可 str_pad(strval($caseid), 6, '0', STR_PAD_LEFT); 请参见功能原型: str

$caseid
通常是一个5位数字(可能更低)。我需要一个前导0,以便数字长度为6位:

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

它起作用了。这里的错误是什么?

您不需要计算差异,只需输入所需的字符总数即可

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

请参见功能原型:

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

用另一个字符串将一个字符串填充到某个长度
,$Pad_length表示所需的长度

我也曾为他的行为而烦恼。我厌倦了,回到了旧马厩


也许,这不是一个答案,但我希望它可能会对某些人有所帮助。

如果您阅读了的文档,那么您将看到,如果第二个参数为负数,小于或等于第一个参数的长度,则不会出现填充。
stru pad
的第二个参数是
pad\u length
。这是您希望返回的字符串的长度。你为什么要做6-strlen(strval($caseid))?这是1。根据“如果pad_length的值为负数,小于或等于输入字符串的长度,则不进行填充。”。
string str_pad (
        string $input , 
        int $pad_length 
        [, string $pad_string = " " 
        [, int $pad_type = STR_PAD_RIGHT ]]
<?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