PHP вероятность выпадения числа 2.X

Random с вероятностью события

 
Посетитель
small user social cms
Медаль
Сообщений: 232
Привет, всем!

Пытаюсь сделать выпадение числа из массива с определенной вероятностью.

Есть массив:
Код PHP:
  1. $arr = array(
  2. 0 => 10,
  3. 1 => 20,
  4. 2 => 70
  5. );
Соответственно чем больше значение, тем чаще нужно показывать ключ.
Делается это для примера с показами баннеров, чем дороже цена баннера, тем чаще он показывается, но не стоит забывать что цена может быть у всех одинаковая!

Нахожу процентное соотношение каждого числа от общей суммы и сравниваю со случайным числом
Код PHP:
  1. $sum = array_sum($arr);
  2. $random = rand(0,100)/100;
  3. foreach ($arr as $key => $value) {
  4. $value = $value/$sum;
  5. if($random <= $value) {
  6. echo $key;
  7. }
  8. }
Но что-то не так, тем более когда например все значения одинаковые!
Прошу помочь\подсказать\сделать, соответственно не бесплатно!!!
Редактировалось: 1 раз (Последний: 3 февраля 2019 в 06:15)
Посетитель
small user social cms
МедальАвторитет форумаКубок зрительских симпатийПочетный донор проекта
Сообщений: 2643
http://php.net/manual/ru/function.array-rand.php
Реклама
cms
Посетитель
small user social cms
Медаль
Сообщений: 232
Вадим Нарочный:
Пытаюсь сделать выпадение числа из массива с определенной вероятностью.
Посетитель
small user social cms
МедальАвторитет форумаКубок зрительских симпатийПочетный донор проекта
Сообщений: 2643
Вадим Нарочный:
с определенной вероятностью.
Просто добавить в массив одинаковых значений, вероятность выпадения которых должна быть больше.
Например четыре раза 70, три раза 40, два раза 20 и т.д.
Посетитель
small user social cms
Медаль
Сообщений: 232
Ris:
Просто добавить в массив одинаковых значений, вероятность выпадения которых должна быть больше.
Например четыре раза 70, три раза 40, два раза 20 и т.д.
Есть два баннера, один стоит 50 копеек, второй 90, тот что дороже нужно показывать чаще!

Оказывается решение было добавить break!
В начало страницы
Предыдущая темаСледующая тема Перейти на форум: