当前位置:   article > 正文

php rand() 重复,php – mt_rand()给我总是相同的数字

php rand 相等

您的问题是,您总是在变量$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值.

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/煮酒与君饮/article/detail/901009
推荐阅读
相关标签
  

闽ICP备14008679号