[генерация случайных данных]материал подготовил: Дмитрий Турецкий 12.05.2004
Необходимость вывести на странице сайта какие-то случайные данные возникает довольно часто. Достаточно вспомнить, например, рекламу, анонсы, генерацию паролей… И в сегодняшней заметке мы поговорим о различных случайных вещах, которые помогут сделать ваш сайт интереснее.
Мы не будем касаться алгоритмов генерации случайных чисел — вряд ли они будут сильно интересовать веб-мастера, которому нужно просто вывести на странице случайную картинку. Единственное, о чем необходимо упомянуть — это необходимость «запустить» генератор случайных чисел перед использованием — если этого не сделать, то выдаваемые им значения будут повторяться при каждом прогоне скрипта. В большинстве языков для этого используется функция seed или srand, которой передается какое-то случайное число — как правило, текущее время. Стоит отметить, что в современных версиях PHP (выше, чем 4.2) делать это не обязательно — генератор случайных чисел инициализируется автоматически.
В PHP случайное число можно получить с помощью функции rand(). Эта функция может принимать два необязательных параметра — минимальное и максимальное значение. Для того чтобы узнать самое большое случайное число, которое можно получить с помощью этой функции, можно воспользоваться функцией getrandmax(). Впрочем, вряд ли это потребуется на практике.
Второй полезной в деле «ослучайвливания» сайта функцией является array_rand(). Она занимается тем, что возвращает индекс (или массив индексов) одного или нескольких случайных элементов заданного массива. использовать ее удобно, например, для случайного выбора фонового цвета какого-то элемента. Так как автоматическое генерирование цветов — занятие неблагодарное (слишком легко получить неподходящие для сайта варианты), то значительно проще создать массив с заранее подобранными сочетающимися цветами, а потом выбирать из него случайные элементы. Например
Помимо выбора цвета, очень востребованным является случайный выбор строки из файла. Например, вы можете создать текстовый файл с различными цитатами и выводить случайную цитату при просмотре страницы. Или, что более актуально, хранить в файле рекламную информацию (в частности, коды баннеров) и показывать ее. Так как количество строк в файле заранее неизвестно (и, в принципе, может изменяться, особенно если файл создается тоже автоматически), то нам придется файл прочитать, а потом уже выбрать какую-то строку. Самым очевидным и простым решением будет использование функции file(), которая читает файл и возвращает его в виде массива, где каждый элемент представляет собой строку исходного файла. Ну, а получив массив, можно воспользоваться уже известной нам функцией array_rand().
извлечение случайного элемента массива требуется довольно часто
Однако недостатки такого метода очень быстро проявятся, если файл достаточно велик, а посетителей много. Ведь полученный массив занимает память, а ее всегда мало… Поэтому можно поступить следующим образом: читать файл построчно и с вероятностью обратно пропорциональной числу прочитанных строк сохранять текущую строку в качестве случайной.
Давайте разберемся, как этот пример работает. Первым делом мы открываем для чтения файл jokes.txt и инициализируем нулем внутреннюю переменную $i. Затем запускаем цикл, который должен прерваться, как только будет дости