我正在使用PHP创建日历,我需要计算一年中每一天的所有事件,以便正确显示切片(例如:绿色用于少数事件,橙色用于3-4个事件,红色用于超过5个事件)。
以下是我用来获取事件所有日期以及当天事件数量的查询:
$q1 = $pdo->query("SELECT day, COUNT(*) as number FROM events GROUP BY day");
在DB中有三个事件,同一天有两个事件,这是输出:
array(2) {
[0]=>
object(stdClass)#8 (2) {
["day"]=>
string(3) "145"
["number"]=>
string(1) "1"
}
[1]=>
object(stdClass)#9 (2) {
["day"]=>
string(3) "335"
["number"]=>
string(1) "2"
}
}
当我echo
天时,我会跟踪$currentDay
变量,该变量从1开始,到最后一天为echo
'时将在365结束。
我希望每天获得number
的值,但是当输出是像这样的多维数组时,我不知道怎么做。
有没有办法将该数组转换为更有用的东西,我可以通过这样的方式找到事件的数量(number
):
$array[$currentDay]["number"] = $number;
如果没有,将SQL查询数量保持在最低限度的最佳方法是什么?我不希望最终每天一次获取一天的事件,365次查询是疯狂的。我不确定在这种情况下最好的方法是什么。
修改
要输出日期,我从1开始,然后在for
(月份)中转到12,并且每个月我都会得到天数,因此它会计算闰年一天。
我在day
表中使用events
字段的原因是因为我试图保持简单。还有一个 startTime 和 endTime 字段,两个Integer用于存储事件开始和结束的时间戳,虽然我不知道如何计算事件的数量使用这样的时间戳的那一天。
答案 0 :(得分:2)
我认为最简单的方法就是一个简单的循环:
// Initialize $q1 as you did..
$q1 = ... get stuff from DB
$q2 = array();
foreach ($q1 as $row) {
$q2[$row['day']] = $row['number'];
}
// At this point, $q2 is the array you want to have.
虽然,如果你只想输出数字,你可以在没有额外数组的情况下编写循环。
foreach ($q1 as $row) {
echo "number for ".$row['day']." is ".$row['number']."<br>";
}