php排序数组由$ array [*] [sum of this]

时间:2015-11-15 13:36:40

标签: php arrays sorting multidimensional-array

我有一个多维数组,用于存储游戏中玩家的信息。它为每个玩家存储一个数组,每个玩家都是一组信息。每个玩家中的一个值是一系列分数。 我希望按照总分最高的顺序将数据输出到表中。

目前,输出没有特别的顺序。我知道获得总分的唯一方法是array_sum($allplayers[0][2])或类似。我如何对数组$allplayers进行排序,以便当我遍历它以输出结果时,它将以最高array_sum开始并向下运行?

数组示例:

//I want to sort $Allplayers by sum of key [3]
$Allplayers ( [0] => Array (
                  [0] => Winning 
                  [1] => 224 
                  [4] => 0 
                  [2] => Array ( [0] => 107 [1] => 114 [3] => 104  ) 
                  [3] => Array ( [0] => 107 [1] => 114 ) )
             [1] => Array ( 
                  [0] => Losing 
                  [1] => 225  
                  [2] => Array ( [0] => 76 )  
                  [3] => Array ( [0] => 76 )  
                  [4] => 1 )

1 个答案:

答案 0 :(得分:1)

你可以从内置函数的usort()php中获得所需的结果。由 @mark baker 建议 在此之前,你必须清楚地理解这个功能 所以对usort的一些解释

<强>语法:

usort($unsorted_array,callbakc_function)

回调函数将有两个参数,这些参数是未排序数组的结果元素。  例如,第一次它将是(0,1)在第二(1,2),依此类推,函数应按以下条件返回0,1或-1

  1. 如果您在特定条件下对两种元素的比较相等 那么0

  2. 如果您对特定条件下的两个元素的比较小于-1

  3. 如果您对特定条件下的两个元素的比较等于1

  4. 和php将对此返回值排序数组,例如如果你的函数为元素索引0,1返回1,那么它将交换这两个元素。最后,您的数组将使用自定义条件进行排序。

      

    注意:回调函数的第一个参数将是下一个元素   array和second将是该实例的当前值。例如在   比较(0,1)索引第一个参数将是数组1,第二个参数将是   阵列[0]。

    现在让我们来看看你的问题,如果你在这里使用usort,你将获得你的函数中的每个玩家数组,然后你必须计算位于第三个索引元素的每个玩家得分的总和并比较两个总和并返回适当的整数值。 所以你应该像这样编码这个问题

    sort($Allplayers,"cmp");
    function cmp($a,$b)
    {
        $total1 =array_sum($a[3]); 
    
        $total2 =array_sum($b[3]); 
        if($total1 == $total2)
            return 0;
        return ($total1 > $total2)? -1 :1;
    }
    

    参考:来自php documention的usort()