巅云智能建站平台搭建版(创业流派版)火爆上线,毕生受权!新增:文章智能收罗+全站真静态打包+都会分站+智能小法式+不法词过滤+H5自顺应+智能链词等功效功效概况
建站专提News

php编写的抽奖法式中奖几率算法

一佰互联网站开辟设想(www.taishanly.com) 宣布日期 2020-04-28 13:45:24 阅读数: 99

们先完成背景PHP的流程,PHP的首要任务是担任设置装备摆设奖项及对应的中奖几率,今后端页面点击翻动某个方块时会想背景PHP发送ajax要求,那末背景PHP按照设置装备摆设的几率,经由历程几率算法给出中奖成果,同时将未中奖的奖项信息一并以JSON数据格局发送给前端页面。

先来看几率计较函数

function get_rand($proArr) {   $result = "";    //几率数组的总几率精度   $proSum = array_sum($proArr);    //几率数组轮回   foreach ($proArr as $key => $proCur) {     $randNum = mt_rand(1, $proSum);     if ($randNum <= $proCur) {       $result = $key;       break;     } else {       $proSum -= $proCur;     }   }   unset ($proArr);    return $result; } 

上述代码是一段典范的几率算法,$proArr是一个事后设置的数组,假定数组为:array(100,200,300,400),起头是从1,1000这个几率规模内挑选第一个数是不是在他的呈现几率规模以内, 若是不在,则将几率空间,也便是k的值减去方才的阿谁数字的几率空间,在本例傍边便是减去100,也便是说第二个数是在1,900这个规模内挑选的。如许挑选到终究,总会有一个数知足要求。就相称于去一个箱子里摸东西,第一个不是,第二个不是,第三个还不是,那最初一个必然是。这个算法简略,并且效力很是高,关头是这个算法已在咱们之前的名目中有利用,特别是大数据量的名目中效力很是棒。

接上去咱们经由历程PHP设置装备摆设奖项。

$prize_arr = array(   "0" => array("id"=>1,"prize"=>"平板电脑","v"=>1),   "1" => array("id"=>2,"prize"=>"数码相机","v"=>5),   "2" => array("id"=>3,"prize"=>"音箱装备","v"=>10),   "3" => array("id"=>4,"prize"=>"4G优盘","v"=>12),   "4" => array("id"=>5,"prize"=>"10Q币","v"=>22),   "5" => array("id"=>6,"prize"=>"下次没准便能够或许中哦","v"=>50), ); 

该二维数组,记实了一切本次抽奖的奖项信息,此中id表现中奖品级,prize表现奖品,v表现中奖几率。注重此中的v必须为整数,你能够或许将对应的奖项的v设置成0,即象征着该奖项抽中的几率是0,数组中v的总和(基数),基数越大越能表现几率的精确性。本例中v的总和为100,那末平板电脑对应的中奖几率便是1%,若是v的总和是10000,那中奖几率便是万分之一了。

每次前端页面的要求,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;  echo json_encode($res);

另附上一个网友的完成体例

/**  * 抽奖  * @param int $total  */  function getReward($total=1000)  {  $win1 = floor((0.12*$total)/100);  $win2 = floor((3*$total)/100);  $win3 = floor((12*$total)/100);  $other = $total-$win1-$win2-$win3;  $return = array();  for ($i=0;$i<$win1;$i++)  {  $return[] = 1;  }  for ($j=0;$j<$win2;$j++)  {  $return[] = 2;  }  for ($m=0;$m<$win3;$m++)  {  $return[] = 3;  }  for ($n=0;$n<$other;$n++)  {  $return[] = "感谢光顾";  }  shuffle($return);  return $return[array_rand($return)];  }  $data = getReward();  echo $data;  ?>

以上所述便是本文的全数内容了,但愿大师能够或许喜好。

一佰互联是天下着名建站品牌办事商,咱们有九年、网站建造、网页设想、php开辟和域名注册及假造主机办事经历,供给的办事更是天下着名。最近几年来还整合团队上风自立开辟了可视化多用户”“3.0平台版,拖拽排版网站建造设想,轻松完成pc站、手机微网站、小法式、APP一体化全网营销网站扶植 ,已胜利的为天下上百家搜集公司供给自助建站平台搭建办事。更多资讯:tags标签

相干消息more

22
04月
centos克隆linux假造机的完整步骤分

媒介当一个Linux完整设置完成今后,便能够或许够利用克隆的体例来在短时候内建立出多个Linux来;本文将给大师具体先容对centos克隆lin... >>概况

26
03月
2019年九个搜集宁静展望

简介:想晓得 2019 年的环球搜集宁静状态 ? 对这些新的一年带给咱们的九个搜集宁静展望,和它对咱们的数字资产,在线糊口的意思和生存。... >>概况

20
04月
详解Canvas 跨域脱坑理论

Canvas 跨域若何处理?这里记实下利用 Canvas 画图历程中所碰到的跨域题目和处理计划。先来看下完成体例。完成体例方针图片普通是由 ... >>概况

28
03月
.net利用automapper的具体教程

简介:装置体例:利用vs自带的nuget办理东西,搜刮AutoMapper ,挑选第一个装置到你的名目便可。先说说DTODTO是个甚么东东?... >>概况

高端网站扶植

美工统筹SEO,为企业电子商务营销助力!

德律风:

023-85725751
建站

产物

域名注册 假造主机 云办事器 企业邮局
智能建站 APP打包 微站/小法式 创业平台
网站推行 媒体营销 智能收罗 AI机械人
400德律风 短信营销 店销机械人
私家定制 流派网站