Как сделать рандомный вывод строк по заданной последовательности. Формируем из домена число. — PROG-TIME

Как сделать рандомный вывод строк по заданной последовательности. Формируем из домена число.

10.06.2020
Содержание:

Сегодня я вам покажу как рандомно выводить элементы массива для разных url, при этом случайный вывод НЕ будет меняться при перезагрузки страницы. Мы сформируем число из передаваемого URL.

Давайте я вам расскажу как с этим столкнулся я…

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

Простой рандом здесь не работает, так как он меняется каждый раз, после перезагрузки страницы.

И вот какое решение я нашёл:

Здесь присутствует WP функция, которая передает текущий URL страницы.

crc32 — Функция вычисляет контрольную сумму по алгоритму CRC32 для строки. Это мы делаем для того чтобы получить число соответствующее строке.

srand — Изменяет начальное число генератора псевдослучайных чисел. Когда мы изменяем начальное число, мы задаём свой алгоритм выбора случайных чисел.

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

shuffle — Эта функция перемещает элементы массива в случайном порядке. Без, заранее заданной, функции srand вы получите случайны порядок, который будет обновляться после каждой перезагрузки страницы.

array_slice — формирует из переданного массива случайный массив с указанным количеством элементов. Первый параметр — массив, который нужно перебрать. Второй параметр — с какого элемента начать перебор, третий параметр — сколько элементов учитывать.

srand(crc32(get_permalink( $post->ID )));

$brandPhrases = $arr_str_for_technik;

shuffle($brandPhrases);

$brandPhrases = array_slice($brandPhrases, 0);

var_dump($brandPhrases);

А для примера я использую вот такой массив.

 $arr_str_for_technik = array( 
        'Работа холодильника основана на принципе холодильной машины, переносящей тепловую энергию из рабочей камеры – наружу, в кухонное помещение', 
        'Холодильники делятся на два вида: среднетемпературные камеры для хранения свежих продуктов и низкотемпературные морозильные камеры', 
        'Прототип морозильника появились несколько тысяч лет назад – использовались помещения для хранения продуктов, наполненные льдом', 
        'Российский прототип холодильника — ледники, представляющие сруб, погруженный в землю', 
        'С 1930 года хладагентом в морозильниках является инертный газ фреон', 
        'Хладагент, обычно, фреон — газ, переносящий лишнее для продуктов тепло от испарителя к конденсатору', 
        'Холодильник тратит около 10% от общего электропотребления дома', 
        'Наиболее экономный режим холодильника - когда в нём находится большое количество продуктов', 
    );

Как ограничить выборку?

Вы можете указать количество строк, которые будут выведены. Например у вас 20 строк, а вам нужно выводить 5 из них.

Для этого укажите количества элементов, в качестве третьего параметра.

$brandPhrases = array_slice($brandPhrases, 0, 5);

Как выводить информация по нескольким строкам (доменам).

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

$hosts = [
    'владимир.рф',
    'москва.рф',
    'питер.рф',
    'ещё_город.рф',
    'и_ещё_один_город.рф',
];
$count = 5;
/*проходимся по всем доменам в массиве*/
foreach ($hosts as $host) {
        srand(crc32($host));
        $brandPhrases = $arr_str_for_technik;
        shuffle($brandPhrases);
        $brandPhrases = array_slice($brandPhrases, 0, $count);
}