我的第一个日历在一个月内循环了30多天

时间:2012-12-11 16:17:40

标签: php loops for-loop foreach calendar

我正在尝试为我的画廊创建一个自己的日历,但我无法让它工作,因为我希望它能够工作。我添加了一个SQL查询,这样我可以在拍摄照片时获取并将日期链接起来。要链接每张照片的正确日期,这里没有任何问题。它是如何循环每个月的日子。

这是我现在正在使用的代码:

echo '<table width="100%" cellpadding="0" cellspacing="0">';

$months = Array(1 => 'Januari',
                2 => 'Februari',
                3 => 'Mars',
                4 => 'April',
                5 => 'Maj',
                6 => 'Juni',
                7 => 'Juli',
                8 => 'Augusti',
                9 => 'September',
                10 => 'Oktober',
                11 => 'November',
                12 => 'December');

foreach($months AS $month_n => $month) {

    # DATABAS: photos (hämta)
    $get_photosdate = "SELECT photo_exif_taken FROM photos";


    echo '<tr>';
        echo '<td align="right" class="calendar-month" width="50">';
            echo '<a href="'.url('sortby/date/2012/'.($month_n < 10 ? '0'.$month_n : $month_n)).'" title="Sortera fotografierna efter den här månaden">';
                echo '<b>'.$month.'</b>';
            echo '</a>';
        echo '</td>';

        echo '<td align="left" class="calendar-day">';
            foreach($sql->query($get_photosdate) AS $date) {
                for($i = 1; $i < 32; $i++) {
                    if(date('Y-m-d', strtotime($date['photo_exif_taken'])) == '2012-'.$month_n.'-'.$i) {
                        echo '<a href="'.url('sortby/date/2012/'.($month_n < 10 ? '0'.$month_n : $month_n).'/'.($i < 10 ? '0'.$i : $i)).'" class="calendar-link" title="Sortera fotografierna efter den här dagen">';
                            echo $i < 10 ? '<span style="color: #a16e74;">0</span>'.$i : $i;
                        echo '</a>';
                    } else {
                        echo '<span style="padding: 2px 3px;">';
                            echo $i < 10 ? '<span style="color: #a2a1a1;">0</span>'.$i : $i;
                        echo '</span>';
                    }

                    if($i == 11 OR $i == 22) {
                        echo '<br>';
                    }
                }
            }
        echo '</td>';
    echo '</tr>';

}

echo '</table>';

它应该打印这样的日子:01 02 03 04 05 06 07 08 09 10 11 12 13 14 15 16等等。但它会打印01 02 03 04 05 06 ... 25 26 27 28 29 30 31 01 02 03 04 05 06等等50次左右,直到它改变月份为止。

怎么了?

提前致谢。

2 个答案:

答案 0 :(得分:3)

你最外面的foreach循环数月,第二个循环遍历你的查询结果,最里面的循环从1到31循环。

因此,如果您的查询提供了例如5结果,你循环

12(月)* 5(结果数)* 31次。

您应该通过一步一步地思考自己想要的内容来重新构建日期工作方式。例如:如果要在日历上显示图像,可以将日历构建为多维数组,然后将图像放在正确的索引上。

编辑:如果你想做一个真正的日历,你还应该考虑使用php内置功能,这样你就可以在一个月内获得正确的天数。 mktime(http://php.net/manual/de/function.mktime.php)或php DateTime(http://php.net/manual/de/class.datetime.php)对象可能对您有所帮助。

答案 1 :(得分:0)

您正在为照片数组的每个元素重复日期列表。我希望你在数据库中有50张左右的照片,它们会引起额外的循环。

重写查询循环,使其根据照片数量不起作用。