Php数组排序函数


Php array usort function

我有一个简单的足球队数组:

   Array
(
    [0] => Array
        (
            [name] => MANCHESTER
            [pts] => 8
            [gd] => 5
        )
    [1] => Array
        (
            [name] => BOURNEMOUTH
            [pts] => 3
            [gd] => 2
        )
    [2] => Array
        (
            [name] => STOKE CITY
            [pts] => 2
            [gd] => 4
        )
    [3] => Array
        (
            [name] => LIVERPOOL
            [pts] => 3
            [gd] => 5
        )
    [4] => Array
        (
            [name] => ARSENAL
            [pts] => 9
            [gd] => 1
        )
)
  • name -是球队名
  • pts -各队总分
  • 各队净胜球数

我想先按pts排序,如果有相同的pts,再按gds排序。

仅按PTS排序,我们有:

function sortByOrder($a, $b){
    return $a['pts'] - $b['pts'];
}
usort($this_is_my_array, 'sortByOrder');

结果数组为:

ARSENAL (pts:9, gd:1)
MANCHESTER (pts:8, gd:5)
BOURNEMOUTH (pts:3, gd:2)
LIVERPOOL (pts:3, gd:5)
STOKE CITY (pts:2, gd:4)

但对于BOURNEMOUTH &LIVERPOOL我们有重复的pts,所以我们需要得到这个结果:

ARSENAL (pts:9, gd:1)
MANCHESTER (pts:8, gd:5)
LIVERPOOL (pts:3, gd:5)
BOURNEMOUTH (pts:3, gd:2)
STOKE CITY (pts:2, gd:4)

Try as

uasort($your_array, function($a,$b){
    $c = $b['pts'] - $a['pts'];
    $c .= $b['gd'] - $a['gd'];
    return $c;
});
print_r($your_array);

小提琴

试试这个:

    $array=array(
    array("name"=>"MANCHESTER","pts"=>"8","gd"=>"5"),
    array("name"=>"BOURNEMOUTH","pts"=>"3","gd"=>"2"),
    array("name"=>"STOKE CITY","pts"=>"2","gd"=>"4"),
    array("name"=>"LIVERPOOL","pts"=>"3","gd"=>"5"),
    array("name"=>"ARSENAL","pts"=>"9","gd"=>"1")
    );
  foreach ($array as $key => $row) {
    $searchcountvalue[$key]  = $row['name'];
    $pastsearchcountvalue[$key] = $row['pts'];
    $abstract_count[$key] = $row['gd'];   
}array_multisort($pastsearchcountvalue, SORT_DESC, $abstract_count,  SORT_DESC, $array);
echo "<pre>";print_r($array);

您的数组是这种格式,请尝试检查此解决方案。

    $s[] = array
        (
            'name' => 'MANCHESTER',
            'pts' => 8,
            'gd' => 5
        );
$s[] = array
        (
            'name' => 'BOURNEMOUTH',
            'pts' => 3,
            'gd' => 2
        );      
$s[] = array
        (
            'name' => 'STOKE CITY',
            'pts' => 2,
            'gd' => 4
        );
   $s[] = array
        (
            'name' => 'testing',
            'pts' => 2,
            'gd' => 6
        );
$s[] = array
        (
            'name'=> 'LIVERPOOL',
            'pts' => 3,
            'gd' => 5
        );      
$s[] = array
        (
            'name' => 'ARSENAL',
            'pts' => 9,
            'gd' => 1
        );


 function array_orderby()
{
    $args = func_get_args();
    $data = array_shift($args);
    foreach ($args as $n => $field) {
        if (is_string($field)) {
            $tmp = array();
            foreach ($data as $key => $row)
                $tmp[$key] = $row[$field];
            $args[$n] = $tmp;
            }
    }
    $args[] = &$data;
    call_user_func_array('array_multisort', $args);
    return array_pop($args);
}


$sorted = array_orderby($s, 'pts', SORT_DESC, 'gd', SORT_DESC);

//输出

Array
(
    [0] => Array
        (
            [name] => ARSENAL
            [pts] => 9
            [gd] => 1
        )
    [1] => Array
        (
            [name] => MANCHESTER
            [pts] => 8
            [gd] => 5
        )
    [2] => Array
        (
            [name] => LIVERPOOL
            [pts] => 3
            [gd] => 5
        )
    [3] => Array
        (
            [name] => BOURNEMOUTH
            [pts] => 3
            [gd] => 2
        )
    [4] => Array
        (
            [name] => Testing
            [pts] => 2
            [gd] => 6
        )
    [5] => Array
        (
            [name] => STOKE CITY
            [pts] => 2
            [gd] => 4
        )
)