@avtorlego

Как сделать рандом с шансом?

Допустим есть массив
$arr = ['test' => 50, 'tost' => 10, 'tost1' => 40];

Нужна функция рандома с регулированием шансов, test выпадает с шансом 50%, tost - 10%, tost1 - 40%
  • Вопрос задан
  • 639 просмотров
Решения вопроса 1
Rsa97
@Rsa97
Для правильного вопроса надо знать половину ответа
function chance($arr) {
  $total = array_sum($arr);
  $rand = rand(1, $total);
  foreach($arr as $key => $prob) {
    $rand -= $prob;
    if ($rand <= 0) {
      return $key;
    }
  }
}

print chance(array('test' => 50, 'tost' => 10, 'tost1' => 40));
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 1
BuriK666
@BuriK666
Компьютерный псих
$arr = ['test' => 50, 'tost' => 10, 'tost1' => 40]; // сумма должна быть 100
sort($arr);
$n = rand(0, 100); // ну или тут использовать array_sum($arr)
$sum = 0;
foreach ($arr as $i => $r) {
    $sum += $r;
    if ($sum >= $n) {
        echo $i;
        break;
    }
}
Ответ написан
Комментировать
Ваш ответ на вопрос

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

Похожие вопросы