2

假设我有以下 MySQL 表;

id      | title   | date
--------+---------+----------
0       | john doe| 2013-02-01
2       | tarzan  | 2013-04-01
9       | toy-box | 2013-04-02
11      | jane    | 2013-01-01

我想获取所有这些结果,并且每年我想创建一个 HTML 表:

January, 2013
[*] Jane

February, 2013
[*] John doe

April, 2013
[*] Tarzan
[*] toy-box

如您所见,三月不存在。我怎样才能用 PHP 产生这样的东西?

4

2 回答 2

4

只需使用 SQL 按月(可能还有标题)排序。然后做这样的事情:

$lastMonthId = null;

foreach ($records as $record) {
    $date = strtotime($record['date']);

    $monthId = date('Ym', $date);
    if ($monthId !== $lastMonthId) {
        if ($lastMonthId !== null) echo '</table>';
        echo '<h1>', date('Y-m', $date), '</h1>';
        echo '<table>';

        $lastMonthId = $monthId;
    }

    // Output <tr> for this record.
}

echo '</table>';

每当月份从一条记录更改为下一条记录时,这都会启动一个新表。

当然,这不会显示空月份,因为它们不存在于数据集中。

此外,看起来您实际上想要一个列表。如果是这种情况,只需将<table>,</table><tr>在该片段中分别替换为<ul>,</ul><li>

于 2013-04-04T10:57:32.297 回答
1

创建一个以月份为键的数组,如果您发现该月份的任何记录添加到数组中。最后,您将拥有以月份为键的数组以及另一个数组中的所有名称

         $myData = array()
         while(Looping through DB record)
        {
             extract Month part and check array_key_exists($myData , monthPart)
            if yes then $myData[$key]['Name'] = UserName
        }
于 2013-04-04T10:55:00.303 回答