如何按主键和辅助键对多维数组进行排序? 例如,假设以下数组:
$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”列作为主键(升序)和“date”排序为辅助键(降序),以获取:
$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";
如何实现这一目标?
答案 0 :(得分:6)
使用像这样的用户:
$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
)
)
答案 1 :(得分:2)
array_multisort()应该为您提供所需的功能...使用PHP文档中的示例#3作为排序的基础,尽管您需要在执行前将这些日期字符串转换为datestamp值那种。
如果此数据来自数据库查询,则在用于检索信息的sql查询中对其进行排序要容易得多。
答案 2 :(得分:1)
PHP没有内置函数来执行这样的复杂排序,因此您需要执行usort()
,这允许您使用指定自己标准的函数对项目进行排序。 / p>
The example given on the PHP manual page几乎与您想要达到的目标完全匹配。
答案 3 :(得分:0)
您可以使用usort()
来定义自定义排序功能
这是一个例子
<?php
function cmp($a, $b)
{
if ($a == $b) {
return 0;
}
return ($a < $b) ? -1 : 1;
}
$a = array(3, 2, 5, 6, 1);
usort($a, "cmp");
foreach ($a as $key => $value) {
echo "$key: $value\n";
}
?>
输出
0: 1
1: 2
2: 3
3: 5
4: 6
可在http://www.php.net/manual/en/function.usort.php发现更多信息 它应该可以帮助你开始。