./comments
./contacts telegram: @stikname
email: ;

Выбрать случайный элемент массива учитывая его "шансы"

PHP
Функция рандомно выбирает из списка вариант, но при этом учитывает процентный шанс выпадения того или иного варианта. В функцию задаётся массив с нужными нам вариантами и их "шансами".

В моём коде, функция и тут же её тестирование.
//функция
function getrand($data) {
$datar = array();
foreach ($data as $key => $value) {
$datar = array_merge($datar, array_fill(0, $value, $key));
}
return $datar[array_rand($datar)];
}

//тестирование
$data = array('js' => '5', 'sql' => '20', 'php' => '75');
$result=array();
for ($i=0; $i < 100; $i++) {
$cur=getrand($data);
if(array_key_exists($cur, $result)) {
$result[$cur]++;
} else {
$result[$cur]=1;
}
}
print_r($result);


В результате получаем массив в котором указано количество выпадений каждого варианта:
Array
(
[php] => 72
[sql] => 24
[js] => 4
)


Если в for задать к примеру 100000 итераций то результат будет уже гораздо ближе к заданным заранее "шансам" :)
Array
(
[php] => 74810
[sql] => 20130
[js] => 5060
)


Мало ли кто не понял... Вот таким образом используется сама функция(функцию конечно тоже нужно написать, не буду дублировать):
$data = array('js' => '5', 'sql' => '20', 'php' => '75');
echo getrand($data);
16.04.2015 01:08:25
admin
1307
1
Комментарии

ascsacasc
11.08.2022 11:20:52
ascsc