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

如何在PHP中生成唯一的随机数?,php,prng,Php,Prng,我正在研究一个MCQ模块,我需要从我的数据库中获取随机问题。问题是我似乎得到了重复的信息。如果没有更多信息,我可以建议一个基本的解决方案。(但请用更多信息更新您的问题) 我猜你们有用户,因为那个么你们可以将用户已经得到的问题保存到一个表中(无论是临时的还是非临时的) 如果没有用户,可以使用会话\u ID作为该用户的用户标识符 因此,当您第一次获取一个问题,并且用户回答它时,它会保存您需要保存的信息,然后将用户id和问题id保存到一个表中 获取下一个问题时,您需要检查用户是否在此新表中具有该问题i

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

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

我猜你们有用户,因为那个么你们可以将用户已经得到的问题保存到一个表中(无论是临时的还是非临时的)

如果没有用户,可以使用
会话\u ID
作为该用户的用户标识符

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


获取下一个问题时,您需要检查用户是否在此新表中具有该问题id。

听起来您希望将问题随机排列,而不是随机访问它们。所以你的算法应该是这样的

  • 获取要显示的所有问题(或问题键)
  • 洗牌
  • 按无序顺序检索/显示它们

  • 对于洗牌签出:

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

    请参阅


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

    如果您要从数据库中获取它们,请使用SQL来完成您的工作。e、 g.随机抽取20个问题(不重复):


    如果行数非常多,可以向表中添加一列,该列存储0到1之间的数字,然后通过查询获取:

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

    这意味着您的数据库不必对整个表进行随机排序,以便只提供20行。

    对于编辑竞争条件表示歉意,RichB@ryeguy当前位置我后退了一步,因为我认为我的编辑效果更好。请随意添加到我的问题中。你的问题经常变化吗,或者它们大多是静态的吗?@Greg-好吧,如果这是任何迹象的话…;-)看起来您遇到的是数据库问题,而不是PHP问题,这取决于您希望如何执行此操作,请告诉我们您使用的是哪个数据库。其他RDBMS具有类似的语法。例如,我相信您可以在MSSQL中使用“orderbynewid()”,在Oracle中使用“orderbydbms_CRYPTO.randominteger”。
    SELECT * FROM `mytable` WHERE `randcolumn` > RAND() LIMIT 20