PHP-排序多维数组

PHP-排序多维数组,php,arrays,sorting,Php,Arrays,Sorting,我是法比奥·马西诺,我是意大利人,所以我的英语可能并不完美 我想实现一种分类足球组的方法 按点(按数字降序排序) 然后根据得分(按数字降序排列) 然后按名称(按字符串升序排序) 例如,如果我有这个多维数组: $group=array( array("Juve", 15, 45), // the values are name, points and goals scored array("Inter", 21, 40), array("Milan",

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

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

  • 按点(按数字降序排序)
  • 然后根据得分(按数字降序排列)
  • 然后按名称(按字符串升序排序)
例如,如果我有这个多维数组:

$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)
          );
提前向您表示感谢和问候。

分拣功能:

使用我的自定义函数来实现您的解决方案它正在工作

   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");
希望这一定会对您有所帮助。

排序功能:

$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);
使用我的自定义函数来实现您的解决方案它正在工作

   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");
希望这一定会对您有所帮助。

$group=array(
$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);
数组(“尤文”,15,45),//值为姓名、得分和进球 数组(“Inter”,21,40), 阵列(“米兰”,15,50) ); 乌斯波特( $group, 功能($a$b){ 如果($a[1]=$b[1]){ 如果($a[2]==$b[2]){ 返回($a[0]<$b[0])?-1:1;//按团队名称(升序) } 回报($a[2]<$b[2])?1:-1;//按得分(递减) } 返回($a[1]<$b[1])?1:-1;//按点(降序) } ); var_dump($组);
$group=array(
数组(“尤文”,15,45),//值为姓名、得分和进球
数组(“Inter”,21,40),
阵列(“米兰”,15,50)
);
乌斯波特(
$group,
功能($a$b){
如果($a[1]=$b[1]){
如果($a[2]==$b[2]){
返回($a[0]<$b[0])?-1:1;//按团队名称(升序)
}
回报($a[2]<$b[2])?1:-1;//按得分(递减)
}
返回($a[1]<$b[1])?1:-1;//按点(降序)
}
);
var_dump($组);

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

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

usort($group, 'CustomSort');

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

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

usort($group, 'CustomSort');
$group=array(
数组(“尤文”,15,45),//值为姓名、得分和进球
数组(“Inter”,21,40),
阵列(“米兰”,15,50)
);
//获取列的列表
foreach($key=>$row的组){
$team[$key]=$row[0];
$point[$key]=$row[1];
$goal[$key]=$row[2];
}
数组\u multisort($point,SORT\u DESC,$goal,SORT\u DESC,$group);
回声“;
印刷(集团);

$group=array(
数组(“尤文”,15,45),//值为姓名、得分和进球
数组(“Inter”,21,40),
阵列(“米兰”,15,50)
);
//获取列的列表
foreach($key=>$row的组){
$team[$key]=$row[0];
$point[$key]=$row[1];
$goal[$key]=$row[2];
}
数组\u multisort($point,SORT\u DESC,$goal,SORT\u DESC,$group);
回声“;
印刷(集团);

此问题可能重复的答案至少为千次。此问题可能重复的答案至少为千次。如果您需要任何澄清,请告诉我!如果您需要任何澄清,请让我知道!