PHP中根據概率實現隨機數

假設有四個選項: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;
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章