如何在PHP中生成唯一的随机数?

时间:2009-03-23 16:32:49

标签: php prng

我正在研究MCQ模块,我需要从我的数据库中获取随机问题。问题是我似乎得到了重复。

6 个答案:

答案 0 :(得分:6)

听起来你想要改变问题,而不是随机访问它们。所以你的算法会是这样的。

  1. 获取您要显示的所有问题(或问题键)。
  2. 随机播放
  3. 以随机排序的顺序检索/显示
  4. 用于改组结帐:Fisher-Yates shuffle algorithm

答案 1 :(得分:6)

如果您是从数据库中提取它们,请使用SQL来完成您的工作。例如提取20个随机问题(不重复):

SELECT * FROM questions ORDER BY RAND() LIMIT 20

答案 2 :(得分:1)

如果您使用的是MySql并且数据量合理,则可以使用ORDER BY RAND()

答案 3 :(得分:0)

如果没有更多信息,我可以建议一个基本的解决方案。 (但请用更多信息更新您的问题)

我猜你有用户,因为那时你可以保存到一个表中(无论是暂时的还是不是),用户已经得到了什么问题。

如果您没有用户,可以使用SESSION_ID作为该用户的用户标识符。

因此,当您第一次提取问题并且用户回答问题时,它会保存您需要保存的信息,然后将用户的ID和问题的ID保存到表格中。

在提取下一个问题时,您会检查用户是否在此新表中包含该问题ID。

答案 4 :(得分:0)

请参阅Do stateless random number generators exist?

任何序列的伪随机数最终都会重复。你如何获得伪随机数?

答案 5 :(得分:0)

如果您有非常多的行,您可以在表中添加一列,该列存储0到1之间的数字,然后使用查询进行提取:

SELECT * FROM `mytable` WHERE `randcolumn` > RAND() LIMIT 20

这意味着您的数据库不必随机命令整个表只提供20行。