Случайный выбор из массива в PHP
У меня уже спрашивали пару раз, как я делаю случайный вывод цитат у себя на сайте в блоке "Умные цитаты". Далее мне удалось выяснить, что проблема здесь с непониманием людей, как вывести случайный элемент из массива в PHP. Задача простая, но тем не менее, раз возникают вопросы, то надо на них отвечать.
Сразу приведу код. Допустим, есть массив с набором цитат. И нужно выбрать одну случайную из них и вывести:
<?php
$quotes = array(); // Инициализируем пустой массив
$quotes[] = "Будьте внимательны к своим мыслям, они — начало поступков."; // Первая цитата
$quotes[] = "Выживает не самый умный или самый сильный, а самый восприимчивый к переменам."; // Вторая цитата
$quotes[] = "Жизнь — гора: поднимаешься медленно, спускаешься быстро."; // Третья цитата
$quotes[] = "Люди не хотят быть богатыми, люди хотят быть богаче других."; // Четвёртая цитата
$number = mt_rand(0, count($quotes) - 1); // Берём случайное число от 0 до (длины массива минус 1) включительно
echo $quotes[$number]; // Выводим цитату
?>
Ключевой момент - это получение случайного числа. Всё, что нужно сделать, это задать правильные границы. Если нужно выбрать на всей длине массива случайный элемент, то это от 0 до (длины массива минус 1). А далее просто вытащить элемент из массива с полученным случайным индексом.
Что касается задачи с цитатами, то их лучше хранить в базе данных. В принципе, если сайт совсем простой, то можно и в текстовом файле. Но если в базе данных, то лучше использовать RAND() и LIMIT в SQL-запросе, чтобы Вы сразу получали единственную и случайную цитату из базы данных.
-
- Михаил Русаков
Комментарии (20):
Я правильно понимаю? $res = $mysqli->query("SELECT `text` FROM `citata` ORDER BY RAND() LIMIT 1"); $arr = $res->fetch_assoc(); echo $arr['text'];
Ответить
Да, всё правильно.
Ответить
Я не могу понять, а зачем от count($quotes) отнимать 1? Ведь тогда получается, что номер самой последней цитаты мы не принимаем в счет.
Ответить
Не рекомендовал бы использовать ORDER BY RAND(), это немного тормозит сайт. Данная функция ускорит данный запрос: function getCitata(){ $mysqli = conectDB(); $offset_result = $mysqli->query("SELECT MIN(`id`) AS min, MAX(`id`) AS max FROM citata"); $offset_row = mysqli_fetch_object($offset_result); $RID = mt_rand($offset_row->min,$offset_row->max); $res_ad = $mysqli->query("SELECT text FROM citata WHERE id >= ".$RID." LIMIT 1"); $row_ad = $res_ad->fetch_assoc(); closeDB($mysqli); echo $row_ad['text']; }
Ответить
Подскажите куда надо вставлять это код? И еще можно ли сделать что бы при нажатие кнопки текст менялся, если да то напишите))) p.s. Можно по подробней только) спс.
Ответить
Вопрос некорректный, рекомендую посмотреть вот этот курс: http://srs.myrusakov.ru/freephp
Ответить
У меня мобильный интернет и я не могу скачать видео урок( а в youtube есть видео урок?
Ответить
В youtube нет, но с мобильным Интернетом и там не удастся посмотреть.
Ответить
А это можно сделать при помощи HTML или JS?
Ответить
В JS да, только хранить цитаты надо будет прямо в исходном коде страницы.
Ответить
Можете привести скрипт?
Ответить
Там есть функция Math.random(), вот её и используйте. А с массивом Вы обязаны уметь работать, а если не умеете, то тогда изучайте JS с нуля.
Ответить
Ясно, спасибо.
Ответить
Михаил, напишите пожалуйста статью а лучше скрипт полной статистики сайта на PHP и MySQL, я вас очень прошу
Ответить
Постараюсь что-нибудь придумать, хотя идеальную статистику невозможно написать.
Ответить
Михаил, если такой проект у Вас будет, дадите ссылку.)
Ответить
Михаил, а нужно делать unset для массива? после вывода?
Ответить
Если он не нужен больше, то можно, хотя никто это не делает, а если потребуется, то нет.
Ответить
смотрите, я правильно поняла? то есть в данном случае получается такой код: <?php $quotes = array(); $quotes[] = "Будьте внимательны к своим мыслям, они — начало поступков."; $quotes[] = "Выживает не самый умный или самый сильный, а самый восприимчивый к переменам."; $quotes[] = "Жизнь — гора: поднимаешься медленно, спускаешься быстро."; $quotes[] = "Люди не хотят быть богатыми, люди хотят быть богаче других."; // $number = mt_rand(0, count($quotes) - 3); echo $quotes[$number]; ?>
Ответить
А чем Вам не нравится array_shuffle()? Перемешали массив, выбрали нулевой элемент...
Ответить
Для добавления комментариев надо войти в систему.
Если Вы ещё не зарегистрированы на сайте, то сначала зарегистрируйтесь.