我正在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
}
任何人都可以帮助我.....
答案 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)来完成这项工作。
答案 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格式。