我想运行一个有两种不同结果的函数,但我希望每个结果真正达到50%.我假设兰德(0,1)是要走的路,但我很好奇,如果这可能有利于一个而不是另一个.获得50/50结果的最佳方法是什么?
谢谢.
编辑:谢谢你们,我不希望它是随机的,我希望结果是101010101而不是111001101.也许我应该用最后一个值输出更新数据库然后返回相反的?
EDIT2:好的,对不起,我的上次编辑有误导性.我只是为每个用户调用一次函数,并将该值作为cookie分配给用户.我希望每个访问用户在订单1010101中收到1或0.
在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()可视化示例
对编辑过的问题的回答:如果你想保持50%的精确比例,那么随机性是你想要的最后一件事.为了您的目的,您可能只想为每个新用户(未检测到cookie)分配数据库中的自动编号,然后给偶数用户的一页和奇数用户的另一页(如评论中的RobS建议).
if( ($user_id % 2) == 0 ) // user id is even else // user id is odd
原始答案: PHP的rand()函数不是一个特别好的伪随机数生成器(参见一个简单的可视化示例).我推荐使用mt_rand().