Генерирование случайных результатов по весу в PHP? - PullRequest
53 голосов
/ 15 января 2009

Я знаю, как генерировать случайное число в PHP, но допустим, что я хочу случайное число в диапазоне от 1 до 10, но мне нужно больше 3,4,5, чем 8,9,10. Как это возможно? Я бы опубликовал то, что я пробовал, но, честно говоря, я даже не знаю, с чего начать.

Ответы [ 12 ]

1 голос
/ 21 марта 2012

Поскольку я использовал решение IainMH, я также могу поделиться своим кодом PHP:

<code><pre><?php

// Set total number of iterations
$total = 1716;

// Set array of random number
$arr = array(1, 2, 3, 3, 3, 3, 3, 4, 4, 4, 4, 5);
$arr2 = array(0, 0, 1, 1, 2, 2, 2, 3, 3, 4, 5);

// Print out random numbers
for ($i=0; $i<$total; $i++){

    // Pick random array index
    $rand = array_rand($arr);
    $rand2 = array_rand($arr2);

    // Print array values
    print $arr[$rand] . "\t" . $arr2[$rand2] . "\r\n";

}

?>
0 голосов
/ 31 июля 2016

функция getBucketFromWeights ($ values) { $ total = $ currentTotal = $ bucket = 0;

foreach ($values as $amount) {
    $total += $amount;
}

$rand = mt_rand(0, $total-1);

foreach ($values as $amount) {
    $currentTotal += $amount;

    if ($rand => $currentTotal) {
        $bucket++;
    }
    else {
        break;
    }
}

return $bucket;

}

Я изменил это из ответа здесь Выбор случайного элемента по заданным пользователем весам

После того, как я написал это, я увидел, что у кого-то еще был более элегантный ответ. Он, он, он, он.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...