zoukankan      html  css  js  c++  java
  • php抽奖程序

    //php概率抽奖算法
    
    1、获取总的概率数
    2、随机从1到总概率数
    3、判断获取的随机数是否在小于等于(就是你随机的数是否在数组值得范围中比如数组为array(1,2,3,4,5,6)则随机出了一个数为3 3是存在array中 所以将键就赋给一个变量 ,如果随机一个数为 7了 那得减去这个范围 一直到能在数组中寻找到  $sum=$sum-$val  像这样(随机数为7  则7-1=6))数组中的值
    
    function get_rand($arr)
    {
        $result=""; 
        $sum=array_sum($arr);  //获取总概率书
        foreach($arr as $key=>$val)
        {
            $rand=mt_rand(1,$sum);  
            //var_dump($val['xx']);
            //rad =7;
            //7-
            
            if($rand<=$val)//获取的值是否在val中有
            {
                //随机的数小于等于了值
                $result=$key;
                 break;
            }else{
                $sum=$sum-$val;
            }
        
            
            
        }
        return $result;
        
    }
    oreach ($prize_arr as $key => $val) { 
        $arr[$val['id']] = $val['v']; 
    } 
     
    $rid = getRand($arr); //根据概率获取奖项id 
     
    $res = $prize_arr[$rid-1]; //中奖项 
    $min = $res['min']; 
    $max = $res['max']; 
    if($res['id']==7){ //七等奖 
        $i = mt_rand(0,5); 
        $result['angle'] = mt_rand($min[$i],$max[$i]); 
    }else{ 
        $result['angle'] = mt_rand($min,$max); //随机生成一个角度 
    } 
    $result['prize'] = $res['prize']; 
     
    echo json_encode($result); 
    $prize_arr = array( 
        '0' => array('id'=>1,'prize'=>'平板电脑','v'=>1), 
        '1' => array('id'=>2,'prize'=>'数码相机','v'=>3), 
        '2' => array('id'=>3,'prize'=>'音箱设备','v'=>6), 
        '3' => array('id'=>4,'prize'=>'4G优盘','v'=>20), 
        '4' => array('id'=>5,'prize'=>'10Q币','v'=>25), 
        '5' => array('id'=>6,'prize'=>'下次没准就能中哦','v'=>50), 
    );
    
    /*
     * 每次前端页面的请求,PHP循环奖项设置数组,
     * 通过概率计算函数get_rand获取抽中的奖项id。
     * 将中奖奖品保存在数组$res['yes']中,
     * 而剩下的未中奖的信息保存在$res['no']中,
     * 最后输出json个数数据给前端页面。
     */
    foreach ($prize_arr as $key => $val) { 
        $arr[$val['id']] = $val['v'];    //带入数组
    } 
    $rid = get_rand($arr); //根据概率获取奖项id 
    
    $res['yes'] = $prize_arr[$rid-1]['prize']; //中奖项 
    unset($prize_arr[$rid-1]); //将中奖项从数组中剔除,剩下未中奖项 
    shuffle($prize_arr); //打乱数组顺序 
    for($i=0;$i<count($prize_arr);$i++){ 
        $pr[] = $prize_arr[$i]['prize']; 
    } 
    $res['no'] = $pr; 
    print_r($res); 
  • 相关阅读:
    poj 2528 Mayor's posters (线段树+离散化)
    poj 1201 Intervals (差分约束)
    hdu 4109 Instrction Arrangement (差分约束)
    poj 1195 Mobile phones (二维 树状数组)
    poj 2983 Is the Information Reliable? (差分约束)
    树状数组 讲解
    poj 2828 Buy Tickets (线段树)
    hdu 1166 敌兵布阵 (树状数组)
    Ubuntu网络配置
    Button控制窗体变量(开关控制灯的状态)
  • 原文地址:https://www.cnblogs.com/mengluo/p/4950347.html
Copyright © 2011-2022 走看看