2013-09-16 3 views
2

может быть, я пытаюсь что-то невозможное, поэтому я прошу :-)PHP - получить всегда те же самые случайные числа по ключевым

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

Возможно ли, если да, как? Спасибо за любую помощь или подсказки.

Пояснение: Если кому-то интересно, почему я хочу это сделать - это для сайта рецептов, где я хочу, чтобы весь день отображал точные одинаковые случайно выбранные рецепты (число дней = ключ), поэтому они меняются каждый день, но остаются неизменными день.

+1

вы просто ищете для http://php.net/manual/en/function.srand.php функционировать? – zaf

+1

Это неправильный подход к генерируемому запросу случайный генератор каждый раз. Сделайте это один раз, сохраните результат для слова и используйте этот результат в течение дня. – arkascha

+1

Сделать семя ранда зависимым от текущего дня. Вызов rand затем генерирует ту же последовательность случайных чисел. – knittl

ответ

1

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

Каждый день первый запрос, сделанный на веб-сайт, выбирает n случайных рецептов и хранит их в базе данных в таблице «recipe_by_days», содержащей день (2013-09-16) и список выбранных рецептов.

Затем следующие посетители получат список, запросив этот стол с сегодняшним днем.

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

Но тогда эта реализация полезна, если вы хотите сохранить случайно выбранные рецепты больше, чем на сегодняшний день.

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

Каждый день первый запрос устанавливает этот столбец в нуль, выбирает n случайных рецептов и обновляет столбец тезисов до текущей даты.

алго довольно прост:

Select the recipes that have "today_random" set to "today". 
If none is returned (because they are in "yesterday" state) : 
    Set the column "today_random" from all the recipes to null 
    Pick n random recipes, update the "today_random" column of these to "today" 
    Return these selected recipes 
else return the result 
0

Просто создать массив дней, давайте предположим, дни недели, и просто получить текущий день Recipies:

$recipies = array(
    0 => array(...), // sunday 
    1 => array(...), // monday 
    2 => array(...), // tuesday 
    ... 
); 

print_r($recipies[date("w")]); // current weekday's recipies 

Тогда вы можете рандомизации для этого конкретного массива с array_shuffle или некоторыми другой путь.

0

Это будет последовательно выбрать 10 случайных чисел между $lowerRange и $upperRange, на основе ключа:

mt_srand(crc32('your-key')); 
$lowerRange = 100; 
$upperRange = 200; 

for ($i = 0; $i < 10; $i++) { 
    $choices[] = mt_rand($lowerRange, $upperRange); 
} 

print_r($choices); 
Смежные вопросы