假設有四個選項:a 佔 10%,b佔 20% ,C佔 30% , d 佔 40% ,原理就是現獲取隨機數,然後找區間。
當然了,選項的數量可以任意。目前默認是總和是 100% 。如果需要別的數,修改隨機數的範圍即可。
這個算法,比較簡單,效率也還算高。
$data = [
'a' => 10,
'b' => 20,
'c' => 30,
'd' => 40
];
echo randomSelect($data);
function randomSelect(&$array)
{
$datas = $array;
if (!is_array($datas) || count($datas) == 0) {
return false;
}
asort($datas); //按照大小排序
$random = rand(1, 100);
$sum = 0;
$flag = '';
foreach ($datas as $key => $data) {
$sum += $data;
// 看取出來的隨機數屬於哪個區間
if ($random <= $sum) {
$flag = $key;
break;
}
}
if ($flag == '') { // 如果傳遞進來的值的和小於100 ,則取概率最大的。
$keys = array_keys($datas);
$flag = $keys[count($keys) - 1];
}
return $flag;
}