按日期排序数组,在​​同一个数组中

时间:2012-05-04 09:10:09

标签: php codeigniter

我正在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
}

任何人都可以帮助我.....

3 个答案:

答案 0 :(得分: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();

答案 1 :(得分:1)


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

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

答案 2 :(得分: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或d-m-y格式的日期:如果分隔符是斜杠(/),则假设为美国m / d / y;而如果分隔符是破折号( - )或点(。),则假定为欧洲d-m-y格式。

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