我正在尝试生成一个正好包含6个随机数的字符串。我当前的代码:
$test = sprintf('%6d', rand(1, 1000000));
使用此代码,我得到的字符串有时在开头像" 53280"
一样为空。在这种情况下,我希望它产生"053280"
。如何实现呢?
答案 0 :(得分:3)
您应该在转换说明中添加一个0
,以表明您想要零填充:
$test = sprintf('%06d', rand(1, 1000000));
// ^-- here
转换说明记录在the sprintf
manual page上。
答案 1 :(得分:2)
您可以将空字符替换为0。
$test = str_replace(" ", "0", sprintf('%6d', rand(1, 1000000)));
答案 2 :(得分:2)
如果您不想使用sprintf
(有些则不要!),可以使用以下替代方法:
$test = str_pad(mt_rand(1, 999999),6,0,STR_PAD_LEFT);
示例输出:
736523
024132
003145
在这里使用mt_rand
是因为它具有更好的随机数功能(虽然不完美,但比rand
更好)。还调整为999999,因为1000000可能会产生7位数。
对所提供的三个答案(Sean,Mine和Aslan)进行10000次迭代的基准测试,这些都是速度的结果:
Sean's Method: 0.005
My Method: 0.006
Aslan's Method: 0.009
因此,最好使用Sean的方法。