实现代码:
<?php/** *php 中奖概率算法 * */function get_zj( $jp ,$glname = "gl"){$sum = 0;foreach($jp as $k =>$v ){$sum += $v[$glname];} $R = rand(1,$sum);//获取随机数 foreach( $jp as $k => $v){if( $R <= $v[$glname] ){return $v;}$R = $R - $v[$glname] ;} }//使用方法//模拟一个从数据库中读取的 中奖配置gl 为 中奖的概率 //例如array( "gl" => 10 , "title" => "一等奖");的中奖概率 = 10 / (10+20+30+40)$jp = array();$jp[] = array( "gl" => 10 , "title" => "一等奖");$jp[] = array( "gl" => 20 , "title" => "二等奖");$jp[] = array( "gl" => 30 , "title" => "三等奖");$jp[] = array( "gl" => 40 , "title" => "未中奖");//调用 中奖概率函数 //返回中奖 信息数组 例如:array( "gl" => 10 , "title" => "一等奖");$zj = get_zj( $jp ); //输出数组var_dump($zj);
使用方法
模拟一个从数据库中读取的 中奖配置 gl 为 中奖的概率
例如array( "gl" => 10 , "title" => "一等奖");的中奖概率 = 10 / (10+20+30+40)
$jp = array();
$jp[] = array( "gl" => 10 , "title" => "一等奖");
$jp[] = array( "gl" => 20 , "title" => "二等奖");
$jp[] = array( "gl" => 30 , "title" => "三等奖");
$jp[] = array( "gl" => 40 , "title" => "未中奖");
调用 中奖概率函数
返回中奖 信息数组 例如:array( "gl" => 10 , "title" => "一等奖");