当前位置:  开发笔记 > 编程语言 > 正文

PHP rand()...得到真正的50/50结果?

如何解决《PHPrand()得到真正的50/50结果?》经验,为你挑选了2个好方法。

我想运行一个有两种不同结果的函数,但我希望每个结果真正达到50%.我假设兰德(0,1)是要走的路,但我很好奇,如果这可能有利于一个而不是另一个.获得50/50结果的最佳方法是什么?

谢谢.

编辑:谢谢你们,我不希望它是随机的,我希望结果是101010101而不是111001101.也许我应该用最后一个值输出更新数据库然后返回相反的?

EDIT2:好的,对不起,我的上次编辑有误导性.我只是为每个用户调用一次函数,并将该值作为cookie分配给用户.我希望每个访问用户在订单1010101中收到1或0.



1> Ólafur Waage..:

在PHP中mt_rand()是一个更好的随机数生成器

mt_rand(0,1);

足够了,应该产生相当不错的50/50值.

引用关于mt_rand:

许多旧libcs​​的随机数生成器具有可疑或未知的特征并且速度很慢.默认情况下,PHP使用带有rand()函数的libc随机数生成器.mt_rand()函数是替代它的替代品.

它使用具有已知特征的随机数发生器,使用»Mersenne Twister,它将产生比平均libc rand()提供的速度快四倍的随机数.

比尔有一个关于视觉例子的良好链接.我不知道用户在PHP中使用了什么PHP,但是因为他包含了我在我的服务器上托管的代码(Linux with PHP 5.1.6)

rand()可视化示例

mt_rand()可视化示例



2> Bill the Liz..:

对编辑过的问题的回答:如果你想保持50%的精确比例,那么随机性是你想要的最后一件事.为了您的目的,您可能只想为每个新用户(未检测到cookie)分配数据库中的自动编号,然后给偶数用户的一页和奇数用户的另一页(如评论中的RobS建议).

if( ($user_id % 2) == 0 )
    // user id is even
else
    // user id is odd

原始答案: PHP的rand()函数不是一个特别好的伪随机数生成器(参见一个简单的可视化示例).我推荐使用mt_rand().

推荐阅读
女女的家_747
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有