wilelf
@wilelf
SEO, музыка, веб-аналитика

Как сделать хотя бы приближенный к рандому рандом на сайте?

Есть задача: показывать рандомно один из нескольких блоков при перезагрузке страниц сайта.


При использовании стандартных средств php показывается в 99% только один из блоков (их сейчас всего 2).


Как вылечить?
  • Вопрос задан
  • 3796 просмотров
Пригласить эксперта
Ответы на вопрос 7
Ogra
@Ogra
Для такой задачи можно поступить совсем просто:
$blockId = time() % 2; // $blockId = 0 или $blockId = 1

Разумеется, использовать такой алгоритм для других задач не стоит ;)
Ответ написан
NeX
@NeX
код покажите, который рандом у вас считает
Ответ написан
Комментировать
nojoke
@nojoke
Можно предположить что не «раскручивается» рандомный счетчик. Попробуйте вставить перед рандомом srand((double)microtime()*1000000) к примеру.
Ответ написан
Комментировать
TrueDrago
@TrueDrago
Я почему-то сразу подумал, что у вас выдача кешируется и все время отдается одно и тоже поэтому.
Ответ написан
Комментировать
@DorBer
Использовать более широкий диапазон:
Ответ написан
Fastto
@Fastto
Я использую такой алгоритм.

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

Складываем вес всех блоков, параллельно формируем матрицу соответствия случайного числа блоку

генерим случайное число от 0 до общего веса всех блоков минус 1.

По полученному числу берем индекс блока из матрицы соответствия.

Матрица соответствия наполняется на этапе подсчета общего веса блоков

например у блока 1 вес 3, у блока 2 вес 3, у блока 3 вес 1, матрица получится такая.
$m3x = Array(
0 => 1,
1 => 1,
2 => 1,
3 => 2,
4 => 2,
5 => 2,
6 => 3,
);

работает все отлично.
Ответ написан
wilelf
@wilelf Автор вопроса
SEO, музыка, веб-аналитика
Спасибо огромное.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы
02 дек. 2021, в 10:31
20000 руб./за проект
02 дек. 2021, в 10:30
5000 руб./за проект
02 дек. 2021, в 10:17
3000 руб./за проект