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
循环,而不是一个一个地创建。
答案 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>