$array=array('0'=>array('id'=>'1','name'=>'队伍1','socre'=>'10','get'=>'5'),'1'=>array('id'=>'2','name'=>'队伍2','socre'=>'10','get'=>'6'),'2'=>array('id'=>'3','name'=>'队伍3','socre'=>'10','get'=>'7'),'3'=>array('id'=>'4','name'=>'队伍4','socre'=>'6','get'=>'2'));排序这个$array数组,先按照score排序,如果score相同,则按胜负关系排序。按胜负关系依然无法排序,按get(得分)排序。假设胜负关系的数组为:$wl = array('1'=>array('win'=>array(2)),'lose'=>array());表示ID为1的球队胜了ID为2的球队一次。主要的是根据$wl数组排序$array

解决方案 »

  1.   

    你给的按则按胜负关系排序,如果比赛是多轮循环你这样写是有bug的!
      

  2.   

    暂且给你个方法好了
    function my_sort($a, $b)
    {
        $wl = array('1'=>array('win'=>array(2)),'lose'=>array());//这里你得把你的胜负数组补全,否则会出现Warning:提示
        if ($a['socre'] == $b['socre']){
            if((!in_array(intval($b['id']),$wl[$a['id']]['win'])) && (!in_array(intval($b['id']),$wl[$a['id']]['lose']))){
                return $a['get']>$b['get']? -1 : 1;
            }
            if(in_array(intval($b['id']),$wl[$a['id']]['win'])){
                return -1;
            }
            if(in_array(intval($b['id']),$wl[$a['id']]['lose'])){
                return 1;
            }
        }
        return ($a['socre'] > $b['socre']) ? -1 : 1;
    } uasort($array, "my_sort");
    print_r($array);
      

  3.   

    我随便给的个例子。我再重新给个数组。$array=array(
        '0'=>array(
            'id'=>'1',
            'name'=>'队伍1',
            'socre'=>'10',
            'get'=>'5',
             'wl'=>array(
                win=>array(),
                loss=>array()
            )
        ),    '1'=>array(
            'id'=>'2',
            'name'=>'队伍2',
            'socre'=>'10',
            'get'=>'6',
            'wl'=>array(
                win=>array(2),
                loss=>array()
            )    ),    '2'=>array(
            'id'=>'3',
            'name'=>'队伍3',
            'socre'=>'10',
            'get'=>'7',
            'wl'=>array(
                win=>array(),
                loss=>array(1)
            )
        ),    '3'=>array(
            'id'=>'4',
            'name'=>'队伍4',
            'socre'=>'6',
            'get'=>'2',
            'wl'=>array(
                win=>array(),
                loss=>array()
            )
        ),
    );这样行么,或者给个更好的建议好么。