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