@KarambyG

Как выбрать элемент массива в зависимости от рейтинга?

Дамы и господа, помогите решить одну проблему.
Предположим у меня есть массив с данными. Циферки - это их вес, в процентах.:
иван => 60
максим => 20
вова => 20


И возникла задача выбрать случайный элемент в зависимости от её веса. Например шанс, что будет выбран элемент "иван" больше, чем другие. Поскольку он имеет больше вес.
Подскажите как быть?..
  • Вопрос задан
  • 128 просмотров
Решения вопроса 1
sergiks
@sergiks Куратор тега PHP
♬♬
Второй вариант – то, что надо. Остаётся получить случайное от 0 до 4 (с равномерным распределением) и взять соотв. имя. У Ивана шансов как раз 3/5.

Upd.
function getRandomWinner($ppl)
{
  $choice = rand(0, array_sum(array_values($ppl)) - 1);

  $sum = 0;
  foreach($ppl as $name => $rank) {
    $sum += $rank;
    if ($choice < $sum) return $name;
  }
}

$winnerName = getRandomWinner([
  'Иван' => 60,
  'Максим' => 20,
  'Вова' => 20,
]);
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

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

Войти через центр авторизации
Похожие вопросы