Выбрать случайный элемент массива учитывая его "шансы"
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);
Комментарии
ascsacasc
11.08.2022 11:20:52
11.08.2022 11:20:52
ascsc