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); 
  • 相关阅读:
    shell关闭指定进程
    linux tricks 之数据对齐。
    linux tricks 之VA系列函数.
    linux tricks 之 typeof用法.
    linux下notify机制(仅用于内核模块之间的通信)
    怎么判定一个mac地址是multicast还是unicast.
    linux tricks 之 ALIGN解析.
    fid解释
    c语言中宏定义#和 ##的作用:
    rebtree学习
  • 原文地址:https://www.cnblogs.com/mengluo/p/4950347.html
Copyright © 2011-2022 走看看