下面的代码生成8位数,但在db中存储时,有时会存储为7 digits.the 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;发布于 2013-03-14 21:05:13
首先,通过像那样使用str_pad,您引入了空格,它可能会进入您的“随机”数字的中间。
将您的str_pad调用更改为:
str_pad($maxid, 8, "0");去掉那些空格。但请注意,其他问题提供了创建随机8位数的更好方法。
然后,当你的随机结果以0开始时,它们就会消失。
要解决这个问题,您可以在数据库中使用CHAR(8)。然后,它将显示前导零。
发布于 2013-03-14 21:20:06
我很惊讶你竟然能拿到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 598https://stackoverflow.com/questions/15410070
复制相似问题