前段时间面试的一家公司的问题是PHP微信红包和抽奖代码的,当时恶补了一下代码的。下面是我自己整理出来的两份代码:
微信红包类的写法: 具体思路是,定义一个总钱数和一个人数,然后最小值为默认0.01元,然后进行循环,设置安全值是为了让后面的人都能拿到钱。具体的写法就不写了,自己看吧
// 微信红包算法
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.'元
';
}
抽奖代码
// 抽奖
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);