php控制概率算法场景
// 短信服务使用概率集合
$smsService = [
0 => ['type' => 'ali', 'rate' => 40],
1 => ['type' => 'baidu', 'rate' => 60],
];
// 将rate字段放入data集合
$data = array_column($smsService, 'rate');
//$data 结果:Array([0 => 40], [1 => 60])
// 调用方法
$key = getRate($data); // 返回的是key
// 输出type
$type = $smsService[key]['type'];
echo $type;
/**
* 概率算法
* @param $data
* @return int|string
*/
private function getRate($data){
$result = 0;
// 获取总权重:100
$sum = array_sum(data);
foreach($data as $key => $val){
$randNum = mt_rand(1, $sum);
if ($randNum <= $val){
$result = $key;
break;
}else {
$sum -= $val;
}
}
// 释放 $data
unset($data);
return $result;
}