1

私は codeigniter でブログ サイトに取り組んでいます。ブログは最後の 1 つの最初の順序でリストされます。つまり、最後のものが一番上になります。ここで、私のアプリケーション変数 $blogs には、リストされるすべてのブログが含まれており、 date_created.$blogs はブログを表示しますが、必要な順序ではありません。date_created 値でブログを並べ替えたいと思います。

ブログを返す主なモデル関数はこちら

public function LoadAllBlogs(){

         $blogs = array();

         $this->db->select('id');
         $this->db->from('blog');
         $q=  $this->db->get();                                 

         foreach ($q->result() as $row) {
               $blog = new Blog();
               $blog->loadWithLatestPublishedEntry($row->id);
               $blogs[] = $blog;
         }

     return $blogs; //contain all the blogs entry and the date in which blog is created
}

誰でも私を助けることができます.....

4

3 に答える 3

5

データベースでソートされるように、クエリに ORDER BY 句を追加する必要があります。order_by()関数にフィールド名を渡し、昇順のascまたは降順のdescを渡します。

$this->db->select('id');
$this->db->from('blog');
$this->db->order_by("date_created", "desc");
$q = $this->db->get();
于 2012-05-04T09:13:56.520 に答える
1


これは、2 つの投稿をそれぞれ比較するカスタム関数が必要であり、php uksort ( array &$array 、 callable $cmp_function ) を使用する必要があるように思えます。

http://php.net/manual/en/function.uksort.php

于 2012-05-04T09:14:49.520 に答える
0

@cillosis は正しい - クエリによる順序を使用する

しかし、あなたはそのように行くつもりはないので、次のことを試すことができます-

ブログ配列がどのように見えるかわかりません。日付の値は次のようなものだと思います-"Y-m-d"

 foreach ($q->result() as $row) {
               $blog = new Blog();
               $blog->loadWithLatestPublishedEntry($row->id);

               $time = strtotime($blog->posting_date);

               $blogs[$time] = $blog;
         }

ksort($blogs); //Oldest first
krsort($blogs); //Latest first

http://www.php.net/manual/en/function.strtotime.php

// 余談ですが、strtotime を使用する場合は、これを念頭に置いてください -> m/d/y または dmy 形式の日付は、さまざまなコンポーネント間の区切り記号を確認することで明確になります。区切り記号がスラッシュ (/) の場合、次に、アメリカの m/d/y が想定されます。一方、セパレータがダッシュ (-) またはドット (.) の場合は、ヨーロッパの dmy 形式が想定されます。

http://www.php.net/manual/en/function.krsort.php

于 2012-05-04T12:31:34.157 に答える