我有一个简单的足球队数组:
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
)
)