0

我正在尝试为我的画廊创建一个自己的日历,但我无法让它像我想要的那样工作。我添加了一个 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 0650 次左右,直到它改变月份。

怎么了?

提前致谢。

4

2 回答 2

3

最外层的 foreach 循环遍历月份,第二个循环遍历查询结果,最内层的 for 循环从 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 ) 对象可能对你有帮助.

于 2012-12-11T16:24:32.030 回答
0

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

重新设计查询循环,使其不会根据照片数量工作。

于 2012-12-11T16:24:02.713 回答