2016-09-19 4 views
-4

Я хочу, чтобы показать случайное число в диапазоне от 1000 до 1.999 с этих требованиямиСлучайного числа каждой неделю для всех посетителей

  • покажет новый номер каждого понедельник
  • с запятой для разделителя тысяч
  • Показать то же количество всех посетителей

Что я нашел до сих пор:

<?php 
srand(floor(date('U'))/(60*60*24*7)); 
$num = 100; 
$a = rand() % $num; 
echo $a; 
echo "<br>"; 
$b = rand() % $num; 
echo $b; 
echo "<br>"; 
$c = rand() % $num; 
echo $c; 
echo "<br>"; 
$d = rand() % $num; 
echo $d; 
echo "<br>"; 
$e = rand() % $num; 
echo $e; 
?> 
+1

насчет хранения, что и последнее сгенерированное дату в базе данных? Затем проверьте время сервера и посмотрите, находится ли он в понедельник, и последняя сгенерированная дата не является текущей датой для повторного создания номера. – SparK

+2

Вы делаете жизнь более сложной, чем она должна быть '$ new_rand = mt_rand (1000, 1999);' Теперь вам нужно где-то ее хранить! И затем выясните, как восстановить его в понедельник – RiggsFolly

+0

Это может помочь: 'echo date ('W N');' показывает номер недели и количество дней в неделю. –

ответ

1

Создав соответствующее семя, вы можете сделать это, не сохраняя результат.

Вы хотите получить ISO-8601 номер недели и номер недели. Вы можете сгенерировать это с помощью date('oW'). Сегодня (и до следующего понедельника), который вернет 201638.

Значение из W меняется каждый понедельник и значение от o меняется каждый год если текущего дня W не принадлежит к предыдущему или следующему году - в этом случае используется в том же году. (Другими словами, год/неделю комбо никогда не будет меняться в середине недели из-за нового года.)

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

mt_srand((int)date('oW')); 

Затем потяните свое случайное число между вашими лимитами. С фиксированной семени это будет производить такое же значение для каждого из ваших посетителей:

$number = mt_rand(1000, 1999); 

Затем отформатировать его, чтобы добавить разделитель тысяч и вывод:

echo number_format($number); 

Все вместе, пропуская промежуточная переменная:

mt_srand((int)date('oW')); 
echo number_format(mt_rand(1000, 1999)); 

Сегодня этот выход 1,331.

Нет необходимости хранить сгенерированное число в любом месте, так как это надежно восстанавливает одинаковое количество для каждого посетителя, каждый день до следующего понедельника - в этот момент вы получаете новое семя и, следовательно, новое случайное число (до следующего понедельника ., как и так далее)


Для получения дополнительной информации о функциях, используемых см PHP manual:

+0

Забытый случайный случай не был случайным ... молодые люди и их семена – SparK

+0

Так что только 2 строки кода будут делать это надежно каждую неделю и показывать одинаковое число всем посетителям? –

+0

Две линии глобальных функций, которые не привязаны к сети, уже в комплекте с небольшим количеством полезности и вывода, выписывающимися где угодно с пропущенными переменными из каждого файла, с которым он контактировал. [/ rand_about_php] Но две строки. PS: не включайте никакого файла, они могут содержать ЗППП ... Исходные коды передаются. – SparK

Смежные вопросы