首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Php数组usort函数

Php数组usort函数
EN

Stack Overflow用户
提问于 2015-07-10 06:04:59
回答 3查看 95关注 0票数 0

我有一个简单的足球队阵列:

代码语言:javascript
复制
   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排序。

我们只按pts进行排序:

代码语言:javascript
复制
function sortByOrder($a, $b){
    return $a['pts'] - $b['pts'];
}
usort($this_is_my_array, 'sortByOrder');

结果数组是:

代码语言:javascript
复制
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,所以我们需要得到这样的结果:

代码语言:javascript
复制
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)
EN

回答 3

Stack Overflow用户

发布于 2015-07-10 06:11:54

试着

代码语言:javascript
复制
uasort($your_array, function($a,$b){
    $c = $b['pts'] - $a['pts'];
    $c .= $b['gd'] - $a['gd'];
    return $c;
});
print_r($your_array);

Fiddle

票数 3
EN

Stack Overflow用户

发布于 2015-07-10 06:23:56

试试这个:

代码语言:javascript
复制
    $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);
票数 0
EN

Stack Overflow用户

发布于 2015-07-10 06:37:22

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

代码语言:javascript
复制
    $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);

// OutPut

代码语言:javascript
复制
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
        )

)
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/31333553

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档