抱歉,我无法在标题中对其进行更多说明,但这是交易。
我有一个SQL表,其中的项目具有经典的日期列,在其中按日期在循环中对它们进行了排序。现在,我想在echo
现有循环中添加一个,以在循环表中显示一行,其中将显示今天添加的项目,昨天添加的项目,依此类推。
这就是我希望它在循环时的外观。(我得到的最接近的是它每秒循环并在每个项目中添加回声部分,这完全是一团糟)
PS:阅读谷歌也许应该作为usort
与if
内现有的foreach
?
----------------------------
Table
----------------------------
echoed `<tr><td>Added: today<td></tr>`
---------------------------
Item 1
Item 2
Item 3
---------------------------
echoed `<tr><td>Added: yesterday<td></tr>`
---------------------------
Item 4
Item 5
Item 6
Item 7
---------------------------
echoed `<tr><td>Added: 29 Aug<td></tr>`
---------------------------
Item 9
Item 10
Item 11
etc
编辑:日期格式不必是8月29日。仅供参考,我自己会对其进行调整。我只需要有关如何实现此逻辑的帮助。
您应该首先在数据库中对它们进行排序!
然后,当您遍历所有项目时,您基本上会记得上一次显示哪个部分,并且在输出新部分的第一行之前,应输出部分标题:
$current = null;
foreach($rows as $row) {
$display = date_create($row['timestamp'])->format('Ymd'); // or whatever!
// it must consistently return something that makes the following consistent:
if($display != $current) {
// add separator that contains "today" or "yesterday" or the date
echo '<tr><td>'.$display.'</td></tr>';
$current = $display;
}
// display the actual row here
}
如果您还想显示数据库中不存在的日期的分隔行,则问题会变得更加棘手。然后,您将必须首先创建一个日期对象,并一次减去一天,直到该日期与行日期匹配,并相应地输出分隔符。
update:特殊显示(请注意,$today
并且$yesterday
必须是简单类型,例如string或int或类似的东西才能起作用):
// before the loop!
$today = date_create()->format('Ymd');
$yesterday = date_create("-1 day")->format('Ymd');
$replacements = [
$today => 'today', // or whatever
$yesterday => 'yesterday', // or whatever
];
在循环中回显时$display
:
echo '<tr><td>'.($replacements[$display] ?? $display).'</td></tr>';
如果应该替换格式化的日期,则外观会如此。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句