0

我有一个数据库表,它给了我以下结果:

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 个链接。

4

3 回答 3

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;
}
于 2009-05-24T21:45:38.460 回答
0

array_multisort应该在这里解决问题 - 它非常强大。

于 2009-05-24T21:44:42.063 回答
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 查询中进行链接更新后的排序。

于 2009-05-24T23:49:08.803 回答