$end_arr =array();
do{
$new_user = array_rand($res_user,$win_count - count($end_arr));
array_push($end_arr,$new_user); /* 去除重复值 */
$ar=array();
$tem=array();
foreach($end_arr as $v){
if(!isset($tem[$v['user_id']])){
$tem[$v['user_id']]=$v;
$ar[]=$v;
}
}
$end_arr = $ar;
}while ($win_count - count($end_arr));
之后正常
$end_arr =array(); //$end_arr 是一个空的数组
do{
$new_user = array_rand($res_user,$win_count - count($end_arr));/*随机提取数组的键名。看看该函数的解释
array_rand() 在你想从数组中取出一个或多个随机的单元时相当有用。它接受 input 作为输入数组和一个可选的参数 num_req,指明了你想取出多少个单元 - 如果没有指定,默认为 1。 如果你只取出一个,array_rand() 返回一个随机单元的键名,否则就返回一个包含随机键名的数组。
*/
array_push($end_arr,$new_user);//把键名或键名数组推入 $end_arr /* 去除重复值 */
$ar=array();
$tem=array();
foreach($end_arr as $v){//这里的 $v 可能是一个值,也个能是一个数组
if(!isset($tem[$v['user_id']])){//这个 $v['user_id'] 真的存在吗?
$tem[$v['user_id']]=$v;
$ar[]=$v;
}
}
$end_arr = $ar;
}while ($win_count - count($end_arr));//想一下,如果一切顺利的话,什么情况下这个表达式会不成立?
do{
$new_user = array_rand($res_user,$win_count - count($end_arr));
foreach($new_user as $v)){
$mid_arr[] = $new_user[$v];
}
array_push($end_arr,$mid_arr); /* 去除重复值 */
$ar=array();
$tem=array();
foreach($end_arr as $v){
if(!isset($tem[$v['user_id']])){
$tem[$v['user_id']]=$v;
$ar[]=$v;
}
}
$end_arr = $ar;
}while ($win_count - count($end_arr));
而你排重的数据
$new_user = array_rand($res_user,$win_count - count($end_arr));
foreach($new_user as $v)){
$end_arr[] = $res_user[$v];
}
//array_push($end_arr,$mid_arr);你的这个思路有问题,你可能需要对同一元素做多次排重
观察你的代码,你需要的只是随机从 $res_user 中抽取 user_id 不同的 $win_count 个元素
所以你只需
//对 $res_user 排重(相同的取第一个)
$r = array();
foreach($res_user as $v) {
if(! isset($r[$v['user_id']])) $r[$v['user_id']] = $v;
}
//打乱数组 $r
shuffle($r);
//提取结果
$end_arr = array_slice($r, -$win_count);