我需要将单个数字(1到9)转换为(01到09)。我可以想到一种方法,但它的大而丑陋和繁琐。我敢肯定必须有一些简洁的方法。任何建议
答案 0 :(得分:196)
首先,您的描述具有误导性。 Double
是浮点数据类型。你可能想要用字符串中的前导零填充你的数字。以下代码执行此操作:
$s = sprintf('%02d', $digit);
有关详细信息,请参阅sprintf
的文档。
答案 1 :(得分:81)
还有str_pad
<?php
$input = "Alien";
echo str_pad($input, 10); // produces "Alien "
echo str_pad($input, 10, "-=", STR_PAD_LEFT); // produces "-=-=-Alien"
echo str_pad($input, 10, "_", STR_PAD_BOTH); // produces "__Alien___"
echo str_pad($input, 6 , "___"); // produces "Alien_"
?>
答案 2 :(得分:60)
使用str_pad的解决方案:
str_pad($digit,2,'0',STR_PAD_LEFT);
php 5.3上的基准
结果str_pad:0.286863088608
结果sprintf:0.234171152115
代码:
$start = microtime(true);
for ($i=0;$i<100000;$i++) {
str_pad(9,2,'0',STR_PAD_LEFT);
str_pad(15,2,'0',STR_PAD_LEFT);
str_pad(100,2,'0',STR_PAD_LEFT);
}
$end = microtime(true);
echo "Result str_pad : ",($end-$start),"\n";
$start = microtime(true);
for ($i=0;$i<100000;$i++) {
sprintf("%02d", 9);
sprintf("%02d", 15);
sprintf("%02d", 100);
}
$end = microtime(true);
echo "Result sprintf : ",($end-$start),"\n";
答案 3 :(得分:0)
getline
的性能在很大程度上取决于填充的长度。要获得更一致的速度,可以使用str_repeat。
scanf
也可以使用数字的字符串值以获得更好的性能。
scanf
在PHP 7.4上测试
str_pad