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

ご覧のとおり、3 月は存在しません。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>';

これにより、月が 1 つのレコードから次のレコードに変わるたびに、新しいテーブルが開始されます。

もちろん、データセットに存在しないため、空の月は表示されません。

また、実際にここにリストが必要なようです。その場合は、そのスニペットの,と をそれぞれ<table>,</table>とに置き換えてください。<tr><ul></ul><li>

于 2013-04-04T10:57:32.297 に答える