从表中获取每个月的数据

时间:2016-08-18 08:34:53

标签: php codeigniter

我有这样的表:

ID     Date             Content      
1   2016-07-29   content for july 29th
2   2016-07-30   content for july 30th
3   2016-08-01   content for august 1st
4   2016-08-02   content for august 2nd

我想要这样的结果:

2016年7月

2016年7月29日 - 7月29日的内容

2016年7月30日 - 7月30日的内容

2016年8月

2016年8月1日 - 8月1日的内容

2016年8月2日 - 8月2日的内容

我创建了手动foreach循环来显示数据,如下所示:

我的模特:

public function get_july16(){
$this->db->select('*');
$this->db->from('table');
$this->db->where('month(date)','07');
$july16 = $this->db->get();
return $july16->result();
}
public function get_aug16(){
$this->db->select('*');
$this->db->from('table');
$this->db->where('month(date)','08');
$aug16 = $this->db->get();
return $aug16->result();
}

我的观点:

<h3>July 2016</h3>
<?php foreach($july16 as $e): ?>
<h4><?php echo $e->date;?></h4>
<div><?php echo $e->content;?></div>
<?php endforeach; ?>

<h3>August 2016</h3>
<?php foreach($aug16 as $e): ?>
<h4><?php echo $e->date;?></h4>
<div><?php echo $e->content;?></div>
<?php endforeach; ?>

我想知道是否有最简单的方法可以一次执行foreach循环,而不是一个一个地创建。

2 个答案:

答案 0 :(得分:1)

Wolfgang1983有权。

但这是解决问题的快速解决方案。 (未经核实)

(您可以使用<?=代替<?php echo

$this->db->select('*');
$this->db->from('table');
$datas = $this->db->get()->result();

$months = [];
foreach ($datas as $d) {
    $date = strtotime($d->date);
    $actualMonth = date("F Y", $date); // get July 2016, August 2016...
    $months[$actualMonth][$date] = $d; // Insert data into board
}

// loop into all months
foreach ($months as $month => $days) {
    echo "<h3>$month</h3>"; // Display month
    foreach ($days as $day) {
        echo "<h4>".$day->date."</h4>";
        echo "<div>".$day->content."</div>";
    }
}

答案 1 :(得分:0)

Mathieu Lescaudron有权,你也可以将生成日期移到SQL查询中并做出类似这样的事情(未经测试):

$this->db->select('date, content, CONCAT(MONTHNAME(date), " ", YEAR(date)) as humanDate');
$this->db->from('table');
$this->db->order_by("date", "asc");
$all = $this->db->get()->result();

然后您可以制作一个foreach,并在foreach中检查humanDate是否已更改并生成新标题<h3>