2013-09-16 44 views
3

$caseid(通常)是一個5位數字(可能會更低)。我希望有一個0領先,這樣的數字是6位數字:PHP的str_pad()和數字的奇怪行爲

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

預期這不起作用(顯示相同的號碼)。相反,如果我添加5到第二個參數str_pad,它的作品。

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

它的工作原理。這裏有什麼錯誤?

+2

如果您閱讀http://php.net/manual/en/function.str-pad.php的文檔,那麼您會看到如果第二個參數是負數,小於或等於第一個參數的長度。 – Cyclonecode

+2

'str_pad'的第二個參數是'pad_length'。這是你想要返回的字符串的時間。你爲什麼要做'6 strlen(strval($ caseid))'?這是1.根據[docs](http://php.net/manual/en/function.str-pad.php):「如果pad_length的值是負值,小於或等於長度輸入字符串,不發生填充。「 –

回答

6

你不需要計算你剛纔把你想要的總字符的差異。

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

謝謝!愚蠢的我。 –

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

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 
00
0

123456 

也許,它不是一個答案,但我希望它可以幫助別人。