我有一个数据库表,它给出了以下结果:
array(8) {
["link_id"]=>
string(2) "20"
["link_url"]=>
string(56) "http://url.of/website"
["link_name"]=>
string(34) "Website title"
["link_target"]=>
string(0) ""
["link_description"]=>
string(0) ""
["link_updated"]=>
string(19) "2009-05-24 16:51:04"
["taxonomy_id"]=>
string(2) "36"
["term_id"]=>
string(2) "34"
["category_name"]=>
string(15) "Link category"
}
我想基于 category_name 键将这些数组中的许多数组分成一个多维数组,然后按 link_updated 键排序。
所以我最终希望它看起来像这样:
array(2) {
["First category"]=>
array(2) {
["link_name"]=>
string(11) "Newest link"
["link_updated"]=>
string(19) "2009-05-24 16:51:24"
}
["Second category"]=>
array(2) {
["link_name"]=>
string(10) "Older link"
["link_updated"]=>
string(19) "2009-05-20 05:32:56"
}
}
我不知道怎么做,但我想我必须自己制作排序方法(usort())?
编辑:我想在每个类别中显示5个链接。
答案 0 :(得分:1)
使用usort(),您可以以任何方式对数组进行排序:
function sort_crazy_way($a, $b){
// do your business.
}
usort($array, 'sort_crazy_way');
对它进行排序后,可以在另一个for循环中创建最后一个数组。
从PHP手册:
比较功能必须返回一个 小于,等于或的整数 如果第一个大于零 论证被认为是 分别小于,等于或 大于第二个。
所以,你的比较函数应该是这样的:
function sort_crazy_way($a, $b){
$sorted_by_category = strcmp($a['category_name'], $b['category_name']);
if($sorted_by_category){
return $sorted_by_category;
}
// If we're here, category_name is the same. Compare link_updated.
$time_diff = strtotime($a['link_updated']) - strtotime($b['link_updated']);
return $time_diff;
}
答案 1 :(得分:0)
array_multisort应该在这里诀窍 - 它非常强大。
答案 2 :(得分:0)
我自己解决了这个问题,使用以下代码:
foreach ($bookmarks as $b)
{
$category[$b["category_name"]][] = array(
"link_id" => $b["link_id"],
"link_url" => $b["link_url"],
"link_name" => $b["link_name"],
"link_target" => $b["link_target"],
"link_description" => $b["link_description"],
"link_updated" => $b["link_updated"],
"taxonomy_id" => $b["taxonomy_id"],
"term_id" => $b["term_id"],
"category_name" => $b["category_name"]
);
}
这将创建一个类别名称数组,并将所有子数组放在右侧父数组中(基于类别)。更新链接后的排序正在SQL查询中进行。