duanlinzhen7235 2015-05-12 18:52
浏览 31
已采纳

PHP按值排序多个数组

I want to know how can i sort this in PHP in base of "leaguePoints" and then in "wins"

<?php
            foreach ($league as $leaguesList)
            {
                if ($leaguesList->queue == "RANKED_SOLO_5x5")
                {
                    foreach ($leaguesList as $list)
                    {
                       if ($list->division == $leagueSummoner->division){
                           $array[] = $list;
                       }
                    }
                }
            }

    var_dump($array);

Result: http://pastebin.com/QkKU7W0k

Im trying to port this from Java, wich i do in this way:

    public void setRankList(List<LeagueSummonerLeagueStats> _rankList) {

    rankList = _rankList;
    Collections.sort(rankList, new Comparator() {

        public int compare(Object match1Obj, Object match2Obj) {

            LeagueSummonerLeagueStats league1 = (LeagueSummonerLeagueStats) match1Obj;

            LeagueSummonerLeagueStats league2 = (LeagueSummonerLeagueStats) match2Obj;

            int i = Integer.compare(league2.getLeaguePoints(), league1.getLeaguePoints());

            if (i != 0)
                return i;

            i = Integer.compare(league2.getWins(), league1.getWins());

            if (i != 0)
                return i;

            return -1;
        }
    });
    }

Thank you very much for your time, i really appreciate your help.

  • 写回答

3条回答 默认 最新

  • doulupian8725 2015-05-12 19:05
    关注

    I don't like to normally provide solutions, but you just needed to port it to another language.

    Basically, you want to write a bubblesort callback, which will first compare two records wins properties, then if they are equal, fall back to the league points property. Something like

    $data = [
        [
            'wins' => 10,
            'leaguePoints' => 10,
        ],
        [
            'wins' => 10,
            'leaguePoints' => 20,
        ],
        [
            'wins' => 20,
            'leaguePoints' => 10,
        ],    
        [
            'wins' => 10,
            'leaguePoints' => 10,
        ],
    ];
    
    usort($data, function($a, $b)
    {
        if ($a['wins'] === $b['wins']) {
            if ($a['leaguePoints'] === $b['leaguePoints']) {
                return 0;
            }
    
            return ($a['leaguePoints'] > $b['leaguePoints']) ? -1 : 1;
        }
    
        return ($a['wins'] > $b['wins']) ? -1 : 1;
    });
    
    print_r($data);
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(2条)

报告相同问题?

悬赏问题

  • ¥15 关于#matlab#的问题:在模糊控制器中选出线路信息,在simulink中根据线路信息生成速度时间目标曲线(初速度为20m/s,15秒后减为0的速度时间图像)我想问线路信息是什么
  • ¥15 banner广告展示设置多少时间不怎么会消耗用户价值
  • ¥16 mybatis的代理对象无法通过@Autowired装填
  • ¥15 可见光定位matlab仿真
  • ¥15 arduino 四自由度机械臂
  • ¥15 wordpress 产品图片 GIF 没法显示
  • ¥15 求三国群英传pl国战时间的修改方法
  • ¥15 matlab代码代写,需写出详细代码,代价私
  • ¥15 ROS系统搭建请教(跨境电商用途)
  • ¥15 AIC3204的示例代码有吗,想用AIC3204测量血氧,找不到相关的代码。