1

我正在使用 codeigniter 开发一个博客站点。在该站点中,博客将列在最后一个第一顺序中。即最后一个将在顶部。在我的应用程序变量 $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


在我看来,这听起来你需要一个自定义函数来比较每两个帖子,并使用 php uksort ( array &$array , callable $cmp_function ) 来完成这项工作。

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

于 2012-05-04T09:14:49.520 回答
0

@cilosis 是对的-通过查询使用 order

但由于您不打算这样做,您可以尝试以下方法 -

我不知道博客数组是什么样的,我假设您的日期值类似于 -"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 回答