PHP使用主&排序多维数组辅助键
问题描述:
如何通过主键和副键对多维数组排序? 例如,假设以下数组:
How do you sort a multidimensional array by primary and secondary key? For example, assuming the following array:
$result = array();
$result[0]["prio"] = 1;
$result[0]["date"] = '2010-02-28';
$result[0]["post"] = "February's thoughts";
$result[1]["prio"] = 0;
$result[1]["date"] = '2010-04-20';
$result[1]["post"] = "April's thoughts";
$result[2]["prio"] = 0;
$result[2]["date"] = '2010-05-30';
$result[2]["post"] = "May's thoughts";
我希望将列"prio"作为主键(升序),将日期"列作为"主键(降序)",以获得:>
I wish to sort the column 'prio' as the primary key (ascending) and 'date' as the secondary key (descending), to obtain:
$result[0]["prio"] = 0;
$result[0]["date"] = '2010-05-30';
$result[0]["post"] = "May's thoughts";
$result[1]["prio"] = 0;
$result[1]["date"] = '2010-04-20';
$result[1]["post"] = "April's thoughts";
$result[2]["prio"] = 1;
$result[2]["date"] = '2010-02-28';
$result[2]["post"] = "February's thoughts";
如何实现?
答
像这样使用usort:
Use usort like this:
$result = array();
$result[0]["prio"] = 1;
$result[0]["date"] = '2010-02-28';
$result[0]["post"] = "February's thoughts";
$result[1]["prio"] = 0;
$result[1]["date"] = '2010-04-20';
$result[1]["post"] = "April's thoughts";
$result[2]["prio"] = 0;
$result[2]["date"] = '2010-05-30';
$result[2]["post"] = "May's thoughts";
function fct($a ,$b) {
if ($a['prio'] < $b['prio']) {
return -1;
} elseif ($a['prio'] > $b['prio']) {
return 1;
} else {
return strcmp($b['date'], $a['date']);
}
}
usort($result, "fct");
print_r($result);
输出:
Array
(
[0] => Array
(
[prio] => 0
[date] => 2010-05-30
[post] => May's thoughts
)
[1] => Array
(
[prio] => 0
[date] => 2010-04-20
[post] => April's thoughts
)
[2] => Array
(
[prio] => 1
[date] => 2010-02-28
[post] => February's thoughts
)
)