逻辑错误PHP循环数组

时间:2016-09-05 12:09:33

标签: php mysql arrays logic

这有点难以解释,特别是在标题中 - 所以这里是:

我正在创建一个包含12个索引的PHP数组,每个月一个 - 每月将显示当月记录的页面查看次数,获得月份,我正在使用当前的UNIX时间和服用离开2629743秒(一个月),每次循环四处,增加2629743秒 - 这应该生成数组,如Jan(1,4,5,9)1视图,2月4视图等。

如果没有视图,我需要它像(null,null,9)所以1月没有视图,3月9日没有视图 - 但索引完全搞乱,视图输入错误

循环代码:

$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个月,然后放入阵列。

2月份的4个视图需要位于第二个索引中,时间戳将大于1月份的时间戳,但小于3月份。

所有帮助赞赏!!

编辑: $ now是当前的UNIX时间(以秒为单位)。

1 个答案:

答案 0 :(得分:0)

  1. 您应确保包含与时间相关的数据的列为DATETIMETIMESTAMP列。这将使基于时间的查询更容易。

  2. 您可以将您在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月),而该期间的Views已经预先分组。您只需将$startMonth$endMonth设置为您查询的整个期间的绝对分隔符,无需每个月单独执行。