Как я могу генерировать уникальные случайные числа в PHP? - PullRequest
0 голосов
/ 23 марта 2009

Я работаю над модулем MCQ, и мне нужно выбрать случайные вопросы из моей базы данных. Проблема в том, что я, кажется, получаю дубликаты.

Ответы [ 6 ]

6 голосов
/ 23 марта 2009

Если вы выбираете их из базы данных, используйте SQL для своей работы. например выборка 20 случайных вопросов (без повторения):

SELECT * FROM questions ORDER BY RAND() LIMIT 20
6 голосов
/ 23 марта 2009

Звучит так, будто вы хотите перетасовать вопросы, а не рандомизировать доступ к ним. Таким образом, ваш алгоритм будет выглядеть примерно так:

  1. Получите все вопросы (или ключи вопросов), которые вы хотите отобразить.
  2. Перемешать их
  3. Извлечение / отображение в них в случайном порядке

для проверки тасования: алгоритм тасования Фишера-Йейтса

1 голос
/ 23 марта 2009

Если вы используете MySql и у вас достаточно небольшой объем данных, вы можете использовать ORDER BY RAND ()

0 голосов
/ 23 марта 2009

Если у вас очень большое количество строк, вы можете добавить в таблицу столбец, в котором хранится число от 0 до 1, а затем получить запрос:

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

Это означает, что вашей базе данных не нужно случайным образом упорядочивать всю таблицу, чтобы предоставить только 20 строк.

0 голосов
/ 23 марта 2009

См. Существуют ли генераторы случайных чисел без состояния?

Любая последовательность псевдослучайных чисел будет в конечном итоге повторяться. Как вы получаете ваши псевдослучайные числа?

0 голосов
/ 23 марта 2009

Без дополнительной информации я могу предложить элементарное решение. (но, пожалуйста, обновите свой вопрос с более подробной информацией)

Я предполагаю, что у вас есть пользователи, потому что тогда вы можете сохранить в таблицу (временную или нет), какие вопросы, по словам пользователя, уже получены.

Если у вас нет пользователей, вы можете использовать SESSION_ID в качестве идентификатора пользователя для этого пользователя.

Поэтому, когда вы впервые получаете вопрос и пользователь отвечает на него, он сохраняет информацию, которую нужно сохранить, а затем идентификатор пользователя и идентификатор вопроса в таблицу.

При получении следующего вопроса вы проверяете, есть ли у пользователя идентификатор этого вопроса в этой новой таблице.

...