下面的代码生成八位数,但是在db中存储时有时存储为7位数.db列宽度为int(11),db为mysql(5.0.45)
srand ((double) microtime( )*1000000);
$maxid = rand(0,100000000);
$mtidno = str_pad($maxid,8);
$shuffled = str_shuffle($mtidno);
echo $shuffled;
答案 0 :(得分:5)
首先,通过使用这样的str_pad
,您将引入空格,这些空格可以进入“随机”数字的中间。
将str_pad
来电更改为:
str_pad($maxid, 8, "0");
摆脱空间。但请注意,其他问题提供了创建随机8位数字的更好方法。
然后,当您的随机播放结果以0
开头时,它们会下降。
要解决此问题,您可以在数据库中使用CHAR(8)
。然后它将显示前导零。
答案 1 :(得分:1)
我很惊讶你得到7位数。填充不会简单地向右边添加空格吗?如果rand函数返回1会发生什么?
你可能只是靠纯粹的运气获得7位和8位数 - 随机性。尝试一段时间,你应该开始看到1到8位数的每个组合。
除了巴特所说的那样,领先的0只会下降。
说到这,如果你有兰特,你为什么需要洗牌?以下就足够了。
srand ((double) microtime( )*1000000);
$maxid = rand(10000000,99999999);
echo $maxid;
测试代码(用于说明错误的逻辑)
srand ((double) microtime( )*1000000);
for($i = 0; $i < 1000000; $i++)
{
$maxid = rand(0,100000000);
if($maxid < 100000){
echo $maxid . "<br>";
$mtidno = str_pad($maxid,8);
$shuffled = str_shuffle($mtidno);
echo $shuffled . "<br>";
}
}
echo "done <br>";
请参阅以下输出,该输出清楚地显示了随机播放后的空格。
0
0
12207
20 21 7
82397
78 329
64086
64086
42724
4 4 2 27
21362
216 32
57983
7 3 598