php rand() 重复,php – mt_rand()给我总是相同的数字
发布日期:2021-06-24 10:53:22 浏览次数:3 分类:技术文章

本文共 1014 字,大约阅读时间需要 3 分钟。

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

转载地址:https://blog.csdn.net/weixin_32306771/article/details/115235517 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!

上一篇:php taglib.php,thinkphp5 taglib自定义标签教程
下一篇:cmd背景变红1003无标题_怎样修改cmd中文字的大小、颜色和背景颜色呢 原来是这样的...

发表评论

最新留言

很好
[***.229.124.182]2024年03月29日 21时52分01秒