将多维数组转换为 "single" 数组

Converting multi-dimensional array to "single" array

我正在 PHP 中制作日历,我需要计算一年中每一天的所有事件,以便正确显示图块(例如:绿色表示少数事件,橙色表示 3 -4 个事件,超过 5 个事件为红色)。

这是我用来获取所有日期的查询,以及当天的事件数:

$q1 = $pdo->query("SELECT day, COUNT(*) as number FROM events GROUP BY day");

数据库中有三个事件,同一天有两个事件,这是输出:

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,对于每个月,我得到天数,所以它占了闰年还有一天。

我在 events table 中使用 day 字段的原因是我试图让事情变得简单。还有一个 startTimeendTime 字段,都是 Integer 来存储事件开始和结束的时间戳,虽然我不知道如何使用这样的时间戳计算当天的事件数。

我认为最简单的方法就是一个简单的循环:

// 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>";
}