2015-11-19 4 views
0

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

$myarray = array(
    'foo', 
    'bar', 
    'winnie', 
    'the', 
    'poo'); 

echo array_rand($myarray); 

Это будет печатать случайную вещь из массива при каждом загрузке страницы. Но я бы хотел, чтобы он менялся только каждый день. Я бы хотел, чтобы он работал, поэтому, если вы загружаете страницу в понедельник в 8:00 и в понедельник в 17:00 (edit1: это тот же случайный вывод, который был вытащен, независимо от того, является ли он пользователем A или пользователем B, видит его), тогда вы увидите тот же (случайный) элемент из массива. Но если страница была загружена во вторник в 13:00, тогда будет напечатан другой элемент из массива. Edit1: часовой пояс должен быть самым простым в программировании (поскольку это не существенно). Поэтому я предполагаю, что часовой пояс серверов будет самым простым.

Я думал о получении целочисленного значения даты, а затем использовал modulo для длины массива (поскольку длина массива будет получать все больше и больше значений со временем). Что-то вроде строк echo $myarray[date(U) % count($myarray)] (это не было проверено и не работает, так как это второе с 1970 года (или когда-либо), а не дни, но это было просто для того, чтобы дать представление о том, какое решение я имел в виду) ,

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

Редактировать 2: Итак, если у нас есть пользователь A и пользователь B, каждый загружает страницу каждый день недели. Тогда я ищу пользователь А, чтобы получить что-то вдоль этих линий:

Monday: foo 
Tuesday: the 
Wednesday: foo 
Thursday: poo 
Friday: winnie 
Saturday: winnie 
Sunday: bar 

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

- конец EDIT2 -

Edit3: Это также может быть просто TXT-файл или JSON-файл, который хранится на FTP-сервере, где каждый день, новый строка этого txt-файла. Он не должен быть массивом.

- конец EDIT3 -

+0

магазин значения в ('json') файл? – DarkBee

+0

Это то же значение для всех пользователей, что означает, что если пользователь A посещает сайт и видит «1», пользователь B также видит «1»? - Если нет, вы можете использовать куки. – Epodax

+0

Какой часовой пояс? Серверы или посетители? – Steve

ответ

2

Вы можете сделать это с помощью простого текстового файла на сервере:

$randoms = array(
    'foo', 
    'bar', 
    'winnie', 
    'the', 
    'poo' 
); 
$file = 'todaysrandom.dat'; 
if(file_exists($file) && date('d-m-Y', filemtime($file)) == date('d-m-Y')){ 
    //if the file exists, and was last updated today, return the contents of the file: 
    $todaysRandom = file_get_contents($file); 

}else{ 
    //else create todays value, and save it to the file 
    $todaysRandom = $randoms[rand(0,count($randoms)-1)]; 
    file_put_contents($file, $todaysRandom); 
} 
echo $todaysRandom; 
+0

Эй Стив. Это работает.Вы сделали небольшую опечатку (file_get_contents должны были быть file_put_contents), и я добавил немного к имени файла, так как он должен работать в среде Wordpress. Но это помогло мне найти решение. Благодаря! – Zeth

+0

@ Zeth Glad я мог бы помочь, и спасибо за то, что заметили опечатку. – Steve

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