解释起来有点复杂,尤其是在标题中 - 所以这里是:
我正在制作一个包含 12 个索引的 PHP 数组,每个索引每个月一个 - 每个月都会显示当月记录的页面浏览量,为了获取月份,我使用当前的 UNIX 时间并采取距离 2629743 秒(一个月),每次循环时,都会添加 2629743 秒 - 然后这应该生成数组,例如 (1, 4, 5, 9) 1 月 1 个 View ,2 月 4 个 View 等。
如果没有 View ,我需要它像 (null, null, 9) 这样,所以一月没有 View ,二月没有 View ,三月 9 - 但索引完全困惑, View 的顺序错误.
循环代码:
$Month = 1; // Start with January
$MonthTimestamp = 2629743; // Start with the time of ONE month from current time
$ArrayTimeStamp = array();
while ($Month <= 12): // Go from January to February
$Value1 = $now - $MonthTimestamp;
$ViewsThisMonth = mysqli_fetch_object(mysqli_query($db, "SELECT SUM(Views) AS NumberFinalViews FROM BlogViews WHERE TimeRecord >= '$Value1' AND TimeRecord < '$now'"));
$ArrayTimeStamp[] = $ViewsThisMonth->NumberFinalViews;
$MonthTimestamp = $MonthTimestamp + 2629743;
$Month++;
endwhile;
重申一下,数组需要存储每个月的页面浏览量,这些页面浏览量存储在数据库中,所有页面浏览量都存储有时间戳,这些时间戳需要分成 12 个月,然后放入数组。
二月的 4 个 View 需要位于第二个索引中,并且时间戳将大于一月的时间戳但小于三月。
感谢所有帮助!!
编辑: $now 是当前 UNIX 时间(以秒为单位)。
最佳答案
您应确保包含时间相关数据的列是
DATETIME
或TIMESTAMP
列。这将使基于时间的查询变得更加容易。您可以将在 PHP 中实现的逻辑移至查询本身:
SELECT SUM(Views) AS NumberFinalViews, EXTRACT(YEAR_MONTH FROM TimeRecord) AS YearMonth FROM BlogViews WHERE TimeRecord BETWEEN '$startMonth' AND '$endMonth' GROUP BY YearMonth
如果
TimeRecord
只是一个表示UNIX时间戳的整数,则需要将其转换:... EXTRACT(YEAR_MONTH FROM FROM_UNIXTIME(TimeRecord)) AS YearMonth
这会返回一个包含字段
YearMonth
的结果,该字段的值类似于201609
(2016 年 9 月),以及其中的观看次数
期间,已经预先分组。您只需将$startMonth
和$endMonth
设置为您查询的整个时间段的绝对分隔符,无需为每个月单独执行此操作。
关于php - PHP 循环数组逻辑错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39330307/