因为一次工程,需要用到按比例随机分配。我在百度能搜索:按照 百分比,求概率。结果都是一些比较混乱的代码。 找到一个看似能用的,大致看了一下,好像挺复杂的,仔细分析了一下代码,有很严重的Bug。 于是自己写一个了,拿出来分享一下吧,抛砖引玉
因为一次工程,需要用到按比例随机分配。我在百度能搜索:按照 百分比,求概率。结果都是一些比较混乱的代码。
找到一个看似能用的,大致看了一下,好像挺复杂的,仔细分析了一下代码,有很严重的Bug。
于是自己写一个了,拿出来分享一下吧,抛砖引玉啊。
php 版本的,当然 ,明白思路之后,别的语言的都很容易搞定。
假设 有四个选项:a 占 10%,b占20% ,C占30% , d 占 40% ,原理就是现获取随机数,然后找区间。
当然了,选项的数量可以任意。
目前默认是 总和是 100% 。如果需要别的数,修改 随机数的范围即可。
这个算法,比较简单,效率也还算高。
当然因为是 rand() ,所以产生的是伪随机数,不是真正意义上的随机,能凑合着用吧。
/*
* ---a------b------------c---------d
* 1----11---------30--------60---------100
* 百分比 概率选择
*/
$data = array(
'a' => 10 ,
'b' => 20 ,
'c' => 30 ,
'd' => 40
);
echo randomSelect( $data );
function randomSelect( &$array ){
$datas = $array ;
if( !is_array($datas) || count($datas) == 0 )
return ;
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;
}
原文地址:按照 百分比,求概率 PHP, 感谢原作者分享。
PHP怎么学习?PHP怎么入门?PHP在哪学?PHP怎么学才快?不用担心,这里为大家提供了PHP速学教程(入门到精通),有需要的小伙伴保存下载就能学习啦!
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号