赞
踩
您的问题是,您总是在变量$hex中使用浮点值.和函数mt_srand()一样,你也可以在
manual中看到:
void mt_srand ([ int $seed ] )
期待一个整数.它的作用是,它只是尝试将您的浮点值转换为整数.但由于失败,它将始终返回0.
所以最后你总是得到种子0然后也有相同的“随机”数字.
如果你这样做,你可以看到这个:
var_dump($hex);
输出:
float(1.0908183557664E+77)
如果你想看看哪个整数最终会转换,你可以使用:
var_dump((int)$hex);
你会发现它总是0.
此外,如果你感兴趣,为什么你的数字最终会浮动,这只是因为整数溢出,因为你的数字太大而且符合manual:
If PHP encounters a number beyond the bounds of the integer type, it will be interpreted as a float instead. Also, an operation which results in a number beyond the bounds of the integer type will return a float instead.
如果你这样做:
echo PHP_INT_MAX;
你将获得int的最大值,它将是:
28192147483647 //32 bit
9223372036854775807 //64 bit
编辑:
那么现在如何解决这个问题仍然确保得到一个随机数?
那么第一个想法可能只是检查值是否大于PHP_INT_MAX,如果是,则将其设置为其他数字.但我认为,似乎你总会有这么大的十六进制数.
所以我建议你这样的东西:
$arr = str_split($hex);
shuffle($arr);
$hex = implode("", array_slice($arr, 0, 7));
在这里,我只是将您的数字分成一个数组,分别为str_split(),然后是shuffle()数组,之后是implode(),前七个数组元素,我用array_slice().
完成此操作后,您可以将它与hexdec()一起使用,然后在mt_srand()中使用它.
另外,为什么我只获得前7个元素?因为那时我可以确保我没有达到PHP_INT_MAX值.
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。