Вам понравилась идея функции, но вам нужны разные шансы. Это можно сделать с помощью поискового массива. Таким образом, у нас все еще есть эти функции:
function something1()
{
// do something number 1
}
function something2()
{
// do something number 3
}
function something3()
{
// do something number 3
}
, но теперь мы используем массив поиска следующим образом:
$events = ['something1' => 3,
'something2' => 1,
'something3' => 5];
Общая сумма этого массива равна 9, а something2
имеет Вероятность возникновения 1 к 9, something1
шанс 1 к 3 и something3
шанс 5 к 9.
Теперь нам все еще нужно вызвать функцию, используя эти шансы, что можно сделать следующим образом:
$total = array_sum($events);
$number = rand(1, $total);
$sum = 0;
foreach ($events as $functionName => $chance) {
$sum += $chance;
if ($sum >= $number) {
$functionName();
break;
}
}