Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/254.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 生成一个正好有6位数字的随机字符串(显示前0位)_Php - Fatal编程技术网

Php 生成一个正好有6位数字的随机字符串(显示前0位)

Php 生成一个正好有6位数字的随机字符串(显示前0位),php,Php,我正在尝试生成一个包含6个随机数的字符串。我当前的代码: $test = sprintf('%6d', rand(1, 1000000)); 通过这段代码,我得到一个字符串,它的开头有时有一个空值,比如“53280”。在这种情况下,我想让它产生“053280”。如何做到这一点 您可以将空字符替换为0 $test = str_replace(" ", "0", sprintf('%6d', rand(1, 1000000))); 您可以将空字符替换为0 $test = str_replace(

我正在尝试生成一个包含6个随机数的字符串。我当前的代码:

$test = sprintf('%6d', rand(1, 1000000));

通过这段代码,我得到一个字符串,它的开头有时有一个空值,比如
“53280”
。在这种情况下,我想让它产生
“053280”
。如何做到这一点

您可以将空字符替换为0

$test = str_replace(" ", "0", sprintf('%6d', rand(1, 1000000)));

您可以将空字符替换为0

$test = str_replace(" ", "0", sprintf('%6d', rand(1, 1000000)));

您应该在转换规范中添加
0
,以指示您需要零填充:

$test = sprintf('%06d', rand(1, 1000000));
//                ^-- here

转换规范记录在上。

您应该在转换规范中添加一个
0
,以指示您需要零填充:

$test = sprintf('%06d', rand(1, 1000000));
//                ^-- here

转换规范记录在上。

如果您不想使用
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次迭代的基准测试,以下是速度方面的结果:

肖恩的方法:0.005 我的方法:0.006 阿斯兰方法:0.009
所以你最好还是使用肖恩的方法。

如果你不想使用
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次迭代的基准测试,以下是速度方面的结果:

肖恩的方法:0.005 我的方法:0.006 阿斯兰方法:0.009

所以你最好还是用肖恩的方法。

用sprintf(“%06d”,rand(1000000));您只是缺少格式化字符串的左前导零,只需使用sprintf(“%06d”,rand(110000));你只是错过了格式化字符串上的左前导零,那些给这个答案打分的人。问题是:“通过这段代码,我得到一个字符串,它的开头有时有一个空值,如“53280”。我希望它在这种情况下生成“053280”。如何实现这一点?”解决这一问题的简单方法是将预测的空字符替换为0。此方法没有任何错误。它确实有效,我测试了它。我知道它确实有效,但不理解有些人为了得到答案而降级!我也不知道,但是谢谢你帮我!不,我不是故意怪你们的。我说的是一般人都这么做。降级的人至少应该对他们的理由发表评论。它不应该是点击即走的功能。那些给这个答案打分的人。问题是:“通过这段代码,我得到一个字符串,它的开头有时有一个空值,如“53280”。我希望它在这种情况下生成“053280”。如何实现这一点?”解决这一问题的简单方法是将预测的空字符替换为0。此方法没有任何错误。它确实有效,我测试了它。我知道它确实有效,但不理解有些人为了得到答案而降级!我也不知道,但是谢谢你帮我!不,我不是故意怪你们的。我说的是一般人都这么做。降级的人至少应该对他们的理由发表评论。它不应该是点击即走功能。使用sprintf有我不知道的缺点吗?谢谢你的替代方法,并指出1000000可能返回7位@Vince0789没有缺点。可读性?个人偏好?这是主观的。我为速度问题添加了一个基准。@DirkJ.Faber我还对示例中的
rand
mt_rand
之间的差异进行了基准测试,似乎
rand
减慢了速度。因此,如果你使用
mt_rand
和肖恩的答案,你会在一行代码中获得最高的性能(当然我们说的是微秒lol So…YMMV)。我会选择组合,在这种情况下,这些微秒可能加起来。谢谢你的研究!使用sprintf是否有我不知道的缺点?感谢您的替代方法,并指出1000000可能返回7位数字@Vince0789没有缺点。可读性?个人偏好?这是主观的。我为速度问题添加了一个基准。@DirkJ.Faber我还对示例中的
rand
mt_rand
之间的差异进行了基准测试,似乎
rand
减慢了速度。因此,如果你使用
mt_rand
和肖恩的答案,你会在一行代码中获得最高的性能(当然我们说的是微秒lol So…YMMV)。我会选择组合,在这种情况下,这些微秒可能加起来。谢谢你的研究!