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キーに基づいて 1 つの多次元配列に並べ替えてから、 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マニュアルから:

比較関数は、最初の引数がそれぞれ 2 番目の引数より小さい、等しい、または大きいと見なされる場合、0 より小さい、等しい、または大きい整数を返さなければなりません。

したがって、比較関数は次のようになります。

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 に答える