不要多次重复字符串

时间:2014-04-21 02:30:55

标签: php mysql while-loop

在数据库中我存储了各种日期:

ID| Dates
-----------------
1 | 23 April 2014
2 | 24 April 2014
3 | 25 April 2014
4 | 01 May 2014
5 | 02 May 2014

我设法用PHP修剪字符串中的所有数字,这只留下了月份标题。

我想要完成的是使用While循环循环几个月,并且每个月仅显示一次。

我想实现以下目标:

<h1>April<h1>
<p>23 April 2014</p>
<p>24 April 2014</p>
<p>25 April 2014</p>

<h1>May</h1>
<p>01 May 2014</p>
<p>02 May 2014</p>

所以,我真正想要的是在正确的标签下动态排序月份 我希望有人可以提供帮助

谢谢

1 个答案:

答案 0 :(得分:2)

如果您的查询按日期升序,您可以通过以下示例来实现您的要求:

<?php
$results = array();// your dataset
$month_name = array(); // empty array

foreach($results as $row){
    $this_month = date('M', strtotime($row['date_field']));
    if (!in_array($this_month, $month_name)) {
        $month_name[] = $this_month;
        echo "<h1>{$this_month}</h1>";
    }

    echo "<p>{$row['date_field']}</p>";
}

我相信有更好的解决方案是可能的(通过将数据库数据字段更改为日期而不是将日期保留为字符串),但从您当前的情况来看,这个解决方案我觉得很完美。

<强> ******EDIT****** 根据您提供的示例更新了代码:

$month_name = array();
$result = mysql_query($sql);
while ($record = mysql_fetch_assoc($result)) {

    // $record['date_field'] is your dates field of your database
    $this_month = date('M', strtotime($record['date_field']));
    if (!in_array($this_month, $month_name)) {
        $month_name[] = $this_month;
        echo "<h1>{$this_month}</h1>";
    }
    echo "<li> <a href='dates.php?ID=" . $record['ID'] . "'>";
    echo "<p><strong>" . $record['date'] . " | " . $record['timeStart'] . " - " . $record['timeEnd'] . "</strong></p>";
    echo "<p>" . $record['place'] . " - " . $record['provincie'] . "</p>";
    echo "<p>" . $record['kind'] . "</p>";
    echo "</a> </li>";
}