PHP - 排序多维数组

时间:2013-09-24 10:38:49

标签: php arrays sorting

我是法比奥·马西诺,我是意大利人,所以我的英语可能并不完美。

我想实现一种分类足球小组的方法

  • by points(按数字排序,按降序排列),
  • 然后根据得分(按数字排序,按降序排列),
  • 然后按名称(按升序排序为字符串)。

例如,如果我有这个多维数组:

$group=array(
       array("Juve", 15, 45), // the values are name, points and goals scored
       array("Inter", 21, 40),
       array("Milan", 15, 50)
      );

我想得到这样的结果:

 $group=array(
           array("Inter", 21, 40),
           array("Milan", 15, 50),
           array("Juve", 15, 45)
          );

提前感谢您和最好的问候。

4 个答案:

答案 0 :(得分:2)

点数是每个子阵列的第二个元素,对吗?如果是这样,那就这样做

function CustomSort($a, $b)
{
    return $a[1] < $b[1] ? -1 : 1;
}

usort($group, 'CustomSort');

如果您想关注名称和目标等其他条件,则只需将数字数组索引更改为代表每个子数组中每个条件的数字。例如,排序名称只是

function NameSort($a, $b)
{
    return $a[0] > $b[0] ? -1 : 1;
}

答案 1 :(得分:1)

$group = array(
    array("Juve", 15, 45), // the values are name, points and goals scored
    array("Inter", 21, 40),
    array("Milan", 15, 50)
);

usort(
    $group,
    function($a, $b) {
        if ($a[1] == $b[1]) {
            if ($a[2] == $b[2]) {
                return ($a[0] < $b[0]) ? -1 : 1;  // by team name (ascending)
            }
            return ($a[2] < $b[2]) ? 1 : -1;  // by goals scored (descending)
        }
        return ($a[1] < $b[1]) ? 1 : -1;  // by points (descending)
    }
);

var_dump($group);

答案 2 :(得分:1)

$group=array(
       array("Juve", 15, 45), // the values are name, points and goals scored
       array("Inter", 21, 40),
       array("Milan", 15, 50)
      );

// Obtain a list of columns
foreach ($group as $key => $row) {
    $team[$key]  = $row[0];
    $point[$key] = $row[1];
    $goal[$key] = $row[2];
}

array_multisort($point, SORT_DESC, $goal, SORT_DESC, $group);

echo "<pre>";
print_r($group);

phpfiddle

答案 3 :(得分:0)

排序功能:

使用我的自定义功能来实现正在运行的解决方案

   function multisort (&$array, $key) {
$valsort=array();
$ret=array();
reset($array);
foreach ($array as $ii => $va) {
    $valsort[$ii]=$va[$key];
}
asort($valsort);
foreach ($valsort as $ii => $va) {
    $ret[$ii]=$array[$ii];
}
$array=$ret;
}

multisort($multiarr,"order");

希望这对您有所帮助。