文章目录 [+]
今天去本邦**科技有限公司去面试,于是乎,遇到这么一个问题,用PHP去做一个概率的随机抽奖,emmm~~,这个的确没有做过,也没有思路,于是乎,回来想了一下,现在将代码贴到这里来。附一个正则验证邮箱~~这也是今天的面试题。
一:PHP抽奖概率算法
//算法 function get_rand($arr){ //概率数组的总概率精度 $allNum = array_sum($arr);//计算数组中元素的和 //概率数组循环 foreach ($arr as $key => $value){ $randNum = mt_rand(1, $allNum); if($randNum <= $value){//如果这个随机数小于等于数组中的一个元素,则返回数组的下标 $result = $key; break; }else{ $allNum -= $value; } } return $result; } //设置奖品数量 $arr = [ ['id' => 1,'num' => 3,'v' => 80], ['id' => 2,'num' => 10,'v' => 65], ['id' => 3,'num' => 20,'v' => 30], ['id' => 4,'num' => 13,'v' => 50], ['id' => 5,'num' => 70,'v' => 5], ['id' => 6,'num' => 1,'v' => 90], ['id' => 7,'num' => 0,'v' => 100], ]; foreach ($arr as $key => $value){ //将$arr放入数组下标为$arr的id元素,值为v元素的数组中 $temp[$value['id']] = $value['v']; } $rid = get_rand($temp) - 1; //获取中奖项以及获奖概率 $res['yes'] = '您获奖个数: ' . $arr[$rid]['num'] . ' 个奖品,获奖几率为:' . $arr[$rid]['v']; unset($arr[$rid]);//将中奖项从数组中剔除,剩下未中奖项 //打乱数组 shuffle($arr); for ($i = 0; $i < count($arr);$i++){ $res['no'][] = $arr[$i]['num']; } print_r($res);
二:PHP邮箱验证
1.正则验证
// 邮箱号 $email = "catlane@foxmail.com"; $pattern = "/^[_a-z0-9-]+(\.[_a-z0-9-]+)*@[a-z0-9-]+(\.[a-z0-9-]+)*(\.[a-z]{2,})$/"; preg_match($pattern, $email, $flags); var_dump($flags);
2.使用 FILTER_VALIDATE_EMAIL 过滤器
$email = "catlane@foxmail.com"; var_dump(filter_var($email, FILTER_VALIDATE_EMAIL));
发表评论