Здравствуйте! Пишу скрипт ротации баннеров простым методом чтобы вставить на сайт, и хочу чтобы был приоритет на выводе который я задам вручную, но не пойму как это реализовать, прошу вашей помощи... Вот код вывода баннеров PHP: $banners = array (); $banners[] = 'Баннер 1'; // показывается пользователю в 70% случаев $banners[] = 'Баннер 2'; // показывается пользователю в 7% случаев $banners[] = 'Баннер 3'; // показывается пользователю в 10% случаев $banners[] = 'Баннер 4'; // показывается пользователю в 13% случаев echo $banners[array_rand ($banners)]; Как сделать чтобы я выставил приоритет как в комментах для каждого баннера и они отображались исходя из этого приоритета и 100% показов по общему. То бишь пользователю показывается на 70% заходов 1 баннер, а остальные уже в порядке приоритета. Заранее спасибо за помощь!
У тебя сейчас просто выброс рандома. А нужна стохастическая выборка. Она делается иначе: 1) Сначала получаете число rand (0, 100); 2) Потом, сравниваете это число с установленной вероятностью появления баннера, представленной как диапазон (M-N ; M), где M - это наибольшая нераспределенная вероятность, а N - искомая вероятность события. То есть, если вам нужно показывать баннер с 70% вероятностью, то, его следует показывать, если выпавшее число лежит в интервале от 3 до 100. Ведь нераспределенная вероятность изначально 100%.
Спасибо, получилось так: PHP: for($i=0;$i<10;$i++) $banners[] = "Баннер 1"; for($i=0;$i<30;$i++) $banners[] = "Баннер 2"; for($i=0;$i<50;$i++) $banners[] = "Баннер 3"; for($i=0;$i<10;$i++) $banners[] = "Баннер 4"; $rand = $banners[rand(0,count($banners))]; echo $rand; Можно ли как-то упростить его, и более удобным по смене % приоритета сделать(чтобы я сменил % в 1 и в других соотношение подстроилось? и у меня почему-то бывает проскакивает пустой результат... Заранее спасибо!)
Однако, код со вкусом карри.. почему бы просто не взять число от 0 до 100 и не проверить его вхождение в интервал через if?
Вот вам стендовый пример: PHP: <?php $chance = 70; //Вероятность показа $test_counter = 0; //Счетчик показов for ($i=0; $i<100; $i++){ //Цикл, имитирующий 100 посещений $random_value = rand(0,100); if ($random_value>100-$chance){ $test_counter++; // Если показ состоялся, увеличивем счетчик } } echo 'Banner was shown for ',$test_counter,' times'; // Узнаем, сколько раз был показан баннер //В среднем число будет стремиться к 70. Плюс минус. Теория вероятности беспощадная стерва.
А в чем разница с моим кодом? вроде бы так же --- Добавлено --- Я просто буду записывать текст и его приоритет в бд, и оттуда массивом выводить в php, и там она выводит через условие например как я выше скинул, вот только как бы это все удобней сделать - хз...
Нет, не так же. У вас генерятся массивы, в которых одно и то же значение повторяется черти знает сколько раз, потом берется рандомное число и выдергивается такая-то ячейка массива. Это решение несколько неочевидное, избыточное и не самое изящное, без обид. В то же время у меня нет никаких избыточных данных. Только число, описывающее вероятность, рандомное число, и проверка рандомного числа на вхождение в текущую вероятность.