繁体   English   中英

php数组usort函数

[英]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
        )

)
  • 名称-是球队名称
  • 积分-每个团队的总积分
  • gd-是每个团队的目标差异

我想球队先进行排序pts ,那么如果我们有相同pts ,排序gds

仅按pt排序,我们有:

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)

但是对于BOURNEMOUTHLIVERPOOL我们要重复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)

尝试为

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
        )

)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM