前段时间面试的一家公司的问题是PHP微信红包和抽奖代码的,当时恶补了一下代码的。下面是我自己整理出来的两份代码:
微信红包类的写法:
具体思路是,定义一个总钱数和一个人数,然后最小值为默认0.01元,然后进行循环,设置安全值是为了让后面的人都能拿到钱。具体的写法就不写了,自己看吧
<?php // 微信红包算法 header("content-type:text/html;charset=utf-8"); $sum = 10; //总价钱 $num = 8 ; //人数 $min = 0.01; //最少值 for($i=1;$i<$num;$i++){ $row = ($sum-($num-$i)*$min)/($num-$i);// 安全值 $money = mt_rand($min*100,$row*100)/100; $sum -= $money; echo '第'.$i.'人,领取'.$money.'元,剩下'.$sum.'元<br/>'; } echo '第'.$num.'人,领取'.$sum.'元,剩下'.$sum.'元'; ?>
抽奖代码
<?php // 抽奖 header("content-type:text/html;charset=utf-8"); function get_rand($arr){ $arr_sum = array_sum($arr); $arr_rand = mt_rand(1,$arr_sum); foreach($arr as $key => $arr_num){ $arr_sum -= $arr_num; if($arr_rand>$arr_sum){ return $key; } } } $p = array( '0' => array('id'=>1,'info'=>'一等奖','v'=>1), '1' => array('id'=>2,'info'=>'二等奖','v'=>5), '2' => array('id'=>3,'info'=>'三等奖','v'=>10), '3' => array('id'=>4,'info'=>'四等奖','v'=>34) ); foreach($p as $key => $value){ $arr[$value['id']] = $value['v']; } $rid = get_rand($arr); $res['yes'] = $p[$rid-1]['info']; unset ($p[$rid-1]) ; shuffle ($p); for($i=0;$i<count($p);$i++){ $pr[]= $p[$i]['info']; } $res['no'] = $pr; var_dump($res); ?>
有需要请自行研究哈。
下一篇: ThinkPHP正则路由分享...