$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));

解决方案 »

  1.   

    将}while ($win_count - count($end_arr));改成}while ($win_count - 3);
    之后正常
      

  2.   

    简单的看一下,就知道这段代码是多荒谬了
    $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));//想一下,如果一切顺利的话,什么情况下这个表达式会不成立?
      

  3.   

    后来查到这个array_rand的问题了,这段就是想随机提取$new_user里的一段内容,后来补上了这个处理,可还是执行超时。$end_arr =array();
                    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));
      

  4.   

    array_rand 返回的是键名或键名数组
    而你排重的数据
    $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); 
      

  5.   

    我是想从$res_user中随机抽出一部分user_id不同的数组,但有一个条件:就是某一个相同的user_id在$res_user中重复出现的次数越多,被抽到的概率越大。
      

  6.   

    将count($end_arr)赋值给一个变量,然后while ($win_count - 变量名);