【问题标题】:Converting multi-dimensional array to "single" array将多维数组转换为“单个”数组
【发布时间】:2015-02-17 19:57:18
【问题描述】:

我正在用 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 表中使用day 字段的原因是因为我试图保持简单。还有一个startTimeendTime字段,都是Integer的,用来存储事件开始和结束的时间戳,虽然不知道怎么统计事件的个数使用这样的时间戳的那一天。

【问题讨论】:

  • 不是每年都有 365 天
  • @Dagon 没错,我编辑了我的帖子来解释我更好地输出日子的方式。感谢您的评论。
  • 我就是不明白,为什么要把这个多维数组转换成单数组呢?您可以访问这样的数据 foreach($dataArray as $data){ echo $data->number; }
  • 您能否发布以下代码:“当我回显这些日子时,我会跟踪 $currentDay 变量,该变量从 1 开始,最后一天将在 365 结束已回显。"
  • 虽然从技术上讲这是一个多维数组,但我不会这样想。它基本上是一个记录集。数组的第一级是行号,第二级是行的列。当它是来自数据库的记录集时,您试图将其视为一种数据结构......

标签: php arrays multidimensional-array


【解决方案1】:

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

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

【讨论】:

    猜你喜欢
    • 2011-10-10
    • 2015-12-24
    • 1970-01-01
    • 1970-01-01
    • 2014-09-09
    • 2018-05-03
    • 2015-07-31
    • 2019-03-20
    相关资源
    最近更新 更多