您的位置:首页 > 编程语言 > PHP开发

PHP中游戏随机概率方法(兼容小数点权重)

2017-01-18 17:15 369 查看
编写游戏代码时,经常会遇到一些需求,需要根据权重数组来生成抽奖结果,以下给出具体方法:

/**
* 生成权重概率
* @param array $randArr 包含概率字段的数组,比如array( array('id' => 1, 'rate' => 40.99), array('id' => 2, 'rate' => 59.01));
* @param int || string $rateKey 概率值在数组中的键名, 比如$randArr中的'rate'
* @return $randArr数组中的某个索引值
*/
public static function createRandomKey($randArr, $rateKey){
$total = 0;
$chooseArr = array();
$pow = 0;
foreach($randArr as $k => $v){
$tmp = explode('.', strval($v[$rateKey]));
if($tmp[1] && strlen($tmp[1]) > $pow){
$pow = strlen($tmp[1]);
}
}
$r = pow(10, $pow);
foreach($randArr as $key => $value){
$total = $total + $value[$rateKey] * $r;
$chooseArr[$key] = $total;
};
$rand = rand(1, $total);
$bofore = 0;
foreach ($chooseArr as $k => $v){
$v = $v * $r;
if($rand > $before && $rand <= $v){
$chooseIndex = $k;
break;
}
$before = $v;
}
return $chooseIndex;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  php 权重概率 抽奖