我有一个变量,其值为1234567。

我希望它包含8位数字,即01234567。

有PHP函数吗?


当前回答

如果输入的数字总是7或8位,也可以使用

$str = ($input < 10000000) ? 0 . $input : $input;

我运行了一些测试,这将比str_pad或sprintf快一倍。 如果输入可以是任意长度,那么你也可以使用

$str = substr('00000000' . $input, -8);

这没有另一个快,但也应该比str_pad和sprintf快一点。

顺便说一句:我的测试还说sprintf比str_pad快一点。我使用PHP 5.6进行所有测试。

编辑:虽然substr版本看起来仍然非常快(PHP 7.2),但它也被打破了,以防你的输入可能比你想要填充的长度更长。例如,你想要填充到3位数字,而你的输入有4个比substr('0000'。'1234', -3) = '234'只会产生最后3位数字

其他回答

简单的答案

$p = 1234567;
$p = sprintf("%08d",$p);

我不确定如何解释“它永远不会超过8位数”的评论,以及它是指输入还是输出。如果它引用输出,则必须有一个额外的substr()调用来剪辑字符串。

剪掉前8位数字

$p = substr(sprintf('%08d', $p),0,8);

剪掉最后8位数字

$p = substr(sprintf('%08d', $p),-8,8);

使用sprintf:

sprintf('%08d', 1234567);

或者你也可以使用str_pad:

str_pad($value, 8, '0', STR_PAD_LEFT);

虽然我不太确定您想要做什么,但您可能正在寻找sprintf。

这就是:

$value = sprintf( '%08d', 1234567 );
echo str_pad("1234567", 8, '0', STR_PAD_LEFT);

假设值为$value:

呼应它: 08年printf (" % d”,美元值); 要得到它: $formatted_value = sprintf("%08d", $value);

这样应该可以了