1

我是 Fabio Masino,我是意大利人,所以我的英语可能并不完美。

我想实现一种对足球组进行排序的方法

  • 按点(按数字排序,按降序排列),
  • 然后按进球数(按数字排序,按降序排列),
  • 然后按名称(按升序排列为字符串)。

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

$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

4 回答 4

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;
}
于 2013-09-24T10:44:20.403 回答
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);
于 2013-09-24T10:44:07.547 回答
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

于 2013-09-24T10:53:31.653 回答
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");

希望这对你有帮助。

于 2013-09-24T10:42:15.710 回答