PHP代码
01.<?php  
02.//200 正常状态  
03.header('HTTP/1.1 200 OK');  
04.  
05.// 301 永久重定向,记得在后面要加重定向地址 Location:$url  
06.header('HTTP/1.1 301 Moved Permanently');  
07.  
08.// 重定向,其实就是302 暂时重定向  
09.header('Location: http://www.tj-px.com/');  
10.  
11.// 设置页面304 没有修改  
12.header('HTTP/1.1 304 Not Modified');  
13.  
14.// 显示登录框,  
15.header('HTTP/1.1 401 Unauthorized');  
16.header('WWW-Authenticate: Basic realm="登录信息"');  
17.echo '显示的信息!';  
18.  
19.// 403 禁止访问  
20.header('HTTP/1.1 403 Forbidden');  
21.  
22.// 404 错误  
23.header('HTTP/1.1 404 Not Found');  
24.  
25.// 500 服务器错误  
26.header('HTTP/1.1 500 Internal Server Error');  
27.  
28.// 3秒后重定向指定地址(也就是刷新到新页面与 <meta http-equiv="refresh" content="10;http://www.tj-px.com/ /> 相同)  
29.header('Refresh: 3; url=http://www.tj-px.com/');  
30.echo '10后跳转到http://www.tj-px.com';  
31.  
32.// 重写 X-Powered-By 值  
33.header('X-Powered-By: PHP/5.3.0');  
34.header('X-Powered-By: Brain/0.6b');  
35.  
36.//设置上下文语言  
37.header('Content-language: en');  
38.  
39.// 设置页面最后修改时间(多用于防缓存)  
40.$time = time() - 60; //建议使用filetime函数来设置页面缓存时间  
41.header('Last-Modified: '.gmdate('D, d M Y H:i:s', $time).' GMT');  
42.  
43.// 设置内容长度  
44.header('Content-Length: 39344');  
45.  
46.// 设置头文件类型,可以用于流文件或者文件下载  
47.header('Content-Type: application/octet-stream');  
48.header('Content-Disposition: attachment; filename="example.zip"');  
49.header('Content-Transfer-Encoding: binary');  
50.readfile('example.zip');//读取文件到客户端  
51.  
52.//禁用页面缓存  
53.header('Cache-Control: no-cache, no-store, max-age=0, must-revalidate');  
54.header('Expires: Mon, 26 Jul 1997 05:00:00 GMT');  
55.header('Pragma: no-cache');  
56.  
57.//设置页面头信息  
58.header('Content-Type: text/html; charset=iso-8859-1');  
59.header('Content-Type: text/html; charset=utf-8');  
60.header('Content-Type: text/plain');  
61.header('Content-Type: image/jpeg');  
62.header('Content-Type: application/zip');  
63.header('Content-Type: application/pdf');  
64.header('Content-Type: audio/mpeg');  
65.header('Content-Type: application/x-shockwave-flash');  
66.//.... 至于Content-Type 的值 可以去查查 w3c 的文档库,那里很丰富  
67.?>  
 
Tags: ,
概率计算函数

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);




Tags:
分页: 1/15 第一页 1 2 3 4 5 6 7 8 9 10 下页 最后页 [ 显示模式: 摘要 | 列表 ]