将多维数组转换为“单个”数组

时间:2015-02-17 19:57:19

标签: php arrays multidimensional-array

我正在使用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用于存储事件开始和结束的时间戳,虽然我不知道如何计算事件的数量使用这样的时间戳的那一天。

1 个答案:

答案 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>";
}