[英]Sorting php array of arrays by 3 fields
So I need to implement sorting show on this website: 所以我需要在这个网站上实现排序显示:
http://news.bbc.co.uk/sport2/hi/olympics/medals_table/default.stm http://news.bbc.co.uk/sport2/hi/olympics/medals_table/default.stm
And part of my array looks like this: 我的数组的一部分看起来像这样:
[1] => Array
(
[country_id] => 3
[country_name] => Russia
[gold] => 23
[silver] => 21
[bronze] => 28
[total] => 72
)
[2] => Array
(
[country_id] => 189
[country_name] => USA
[gold] => 36
[silver] => 38
[bronze] => 36
[total] => 10
)
[3] => Array
(
[country_id] => 230
[country_name] => Germany
[gold] => 16
[silver] => 10
[bronze] => 15
[total] => 41
)
[4] => Array
(
[country_id] => 231
[country_name] => China
[gold] => 51
[silver] => 21
[bronze] => 28
[total] => 100
)
So I need to sort array by gold,silver,bronze and then country_name. 因此,我需要按金,银,青铜和country_name的顺序对数组进行排序。
Does anyone have some idea for this ? 有人对此有想法吗?
use uasort function : 使用uasort函数:
$arr = array(
Array(
'country_id' => 3,
'country_name' => 'Russia',
'gold' => 23,
'silver' => 21,
'bronze' => 28,
'total' => 72,
),
Array(
'country_id' => 189,
'country_name' => 'USA',
'gold' => 36,
'silver' => 38,
'bronze' => 36,
'total' => 10,
),
Array(
'country_id' => 230,
'country_name' => 'Germany',
'gold' => 16,
'silver' => 10,
'bronze' => 15,
'total' => 41,
),
Array(
'country_id' => 231,
'country_name' => 'China',
'gold' => 51,
'silver' => 21,
'bronze' => 28,
'total' => 100,
)
);
function mySort($a,$b) {
if ($b['gold'] == $a['gold']) {
if ($b['silver'] == $a['silver']) {
if ($b['bronze'] == $a['bronze']) {
return strcmp($b['country_name'], $a['country_name']);
} else {
return $b['bronze'] - $a['bronze'];
}
} else {
return $b['silver'] - $a['silver'];
}
} else {
return $b['gold'] - $a['gold'];
}
}
uasort($arr, 'mySort');
print_r($arr);
output: 输出:
Array
(
[1] => Array
(
[country_id] => 189
[country_name] => USA
[gold] => 36
[silver] => 38
[bronze] => 36
[total] => 10
)
[0] => Array
(
[country_id] => 3
[country_name] => Russia
[gold] => 23
[silver] => 21
[bronze] => 28
[total] => 72
)
[3] => Array
(
[country_id] => 231
[country_name] => China
[gold] => 51
[silver] => 21
[bronze] => 28
[total] => 100
)
[2] => Array
(
[country_id] => 230
[country_name] => Germany
[gold] => 16
[silver] => 10
[bronze] => 15
[total] => 41
)
)
Probably there is shorter way u can find. 也许您可以找到更短的方法。 But this may also help
但这可能也有帮助
function my_sort($a, $b) {
if($a['gold'] > $b['gold']) {
return -1;
}
elseif ($a['gold'] == $b['gold']) {
if($a['silver'] > $b['silver']) {
return -1;
}
elseif ($a['silver'] == $b['silver']) {
if ($a['bronze'] > $b['bronze']) {
return -1;
}
elseif ($a['bronze'] == $b['bronze']) {
return strcmp($b['country_name'], $a['country_name']);
}
return 1;
}
return 1;
}
return 1;
}
usort($arr, 'my_sort');
print_r($arr);
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.