1.场景:商品抽奖,用户参与抽奖后,分享页面给新用户,并且新用户也参与抽奖,
然后为上个用户增加一次抽奖码。
2.问题:用户获得的抽奖码机会只为了增加自己的中奖概率,一次活动的产品一个用户只
能中一次。
public function index(){
//中奖名单
$arr = [
['id'=>1,'openid'=>1],
['id'=>2,'openid'=>2],
['id'=>3,'openid'=>3],
['id'=>4,'openid'=>4],
['id'=>5,'openid'=>5],
['id'=>6,'openid'=>5],
['id'=>7,'openid'=>5],
['id'=>8,'openid'=>5],
['id'=>9,'openid'=>5],
['id'=>10,'openid'=>5],
['id'=>11,'openid'=>1],
['id'=>12,'openid'=>7],
['id'=>13,'openid'=>1],
['id'=>14,'openid'=>9],
['id'=>15,'openid'=>1],
['id'=>16,'openid'=>1],
['id'=>17,'openid'=>1],
['id'=>18,'openid'=>1],
['id'=>19,'openid'=>9],
['id'=>20,'openid'=>9],
['id'=>21,'openid'=>9],
['id'=>22,'openid'=>9],
];
$zj_people = array_rand($arr,5);//中奖人数
$arr2 = [];
foreach($zj_people as $kk => $vv){
$all2[] = $arr[$vv];//获取中奖人的活动id,openid
}
//去除重复中奖的人,根据openid字段
$sort_arr = $this->second_array_unique_bykey($all2,'openid');
foreach($sort_arr as $k => $v){
if($sort_arr[$k]['openid'] == ''){
foreach($arr as $k2 => $v2){
if($this->in_array_r($v2['openid'],$sort_arr)){
//这里很重要,目的是拿所有抽奖人的openid去查询已中奖数组是否出现相同的openid,如果没有出现,则替换当前数据,加入已中奖数组。
$sort_arr[$k] = $v2;
$sort_arr[$k]['isReplace'] = 1;
}
}
}
}
print_r($sort_arr);die;//打印查看中奖列表
}
public function in_array_r($needle, $haystack) {
$num = 0;
foreach($haystack as $k=>$v){
if($v['openid']==$needle){
$num = 1;
}
}
if($num==1){
return false;
}else{
return true;
}
}
public function second_array_unique_bykey($arr, $key){
$tmp_arr = array();
foreach($arr as $k => $v)
{
if(in_array($v[$key], $tmp_arr)) //搜索$v[$key]是否在$tmp_arr数组中存在,若存在返回true
{
$arr[$k][$key] = ''; //销毁一个变量 如果$tmp_arr中已存在相同的值就删除该值
}
else {
$tmp_arr[$k] = $v[$key]; //将不同的值放在该数组中保存
}
}
// ksort($arr); //ksort函数对数组进行排序(保留原键值key) sort为不保留key值
return $arr;
}
打印结果