<?php /* *算法学习自百度.只是学习和记录 */ header("Content-type:text/html;charset=utf-8"); //1.设置奖项,id是奖项id,name是中奖名称,v是中奖概率 $arr = array( array('id' => 1, 'name' => '特等奖', 'v' => 1), array('id' => 2, 'name' => '一等奖', 'v' => 10), array('id' => 3, 'name' => '二等奖', 'v' => 10), array('id' => 4, 'name' => '三等奖', 'v' => 10), array('id' => 5, 'name' => '四等奖', 'v' => 20), array('id' => 6, 'name' => '未中奖', 'v' => 50) ); //2.计算改路综合并抽奖 function getrand($pro) { $result = array(); //循环奖项数组将原概率保存在新的数组 foreach ($pro as $key => $value) { $arr[$key] = $value['v']; } asort($arr); //计算概率总数 $prosum = array_sum($arr); //从刚才创建的概率数组循环 foreach ($arr as $key => $value) { $randNum = mt_rand(1, $prosum); //生成一个随机数(1-总概率) //当前用户生成的随机数小于或者等于就是中奖 if ($randNum <= $value) { $result = $pro[$key]; break; } //当前用户生成的随机数大于奖项的概率,这个奖项错过.同时从总的概率中去除本奖项的概率 else { $prosum -= $value; } } //返回中奖结果 return $result; } //测试执行 $res = getrand($arr); print_r($res); ?>