多维数组MySQLi-->;PHP-->;JSON-->;海图

多维数组MySQLi-->;PHP-->;JSON-->;海图,php,mysql,json,multidimensional-array,Php,Mysql,Json,Multidimensional Array,我试图从一个充满传感器值的MySQL数据库中创建一个JSON数组。我正在尝试从MySQL结果创建一个多维数组,这样一个查询就可以完成所有任务,从而有望减少服务器负载 我想使用highcharts中的结果来绘制多个传感器节点和多个传感器的结果。我想用时间轴绘制结果 首先,我不确定一个包含我所有数据的大数组是否是正确的方法,或者多个较小的数组是否更好,欢迎对此发表任何评论。我在寻找帮助的是创建一个JSON数组 到目前为止,我得到的是: <?php require_once 'db_login.

我试图从一个充满传感器值的MySQL数据库中创建一个JSON数组。我正在尝试从MySQL结果创建一个多维数组,这样一个查询就可以完成所有任务,从而有望减少服务器负载

我想使用highcharts中的结果来绘制多个传感器节点和多个传感器的结果。我想用时间轴绘制结果

首先,我不确定一个包含我所有数据的大数组是否是正确的方法,或者多个较小的数组是否更好,欢迎对此发表任何评论。我在寻找帮助的是创建一个JSON数组

到目前为止,我得到的是:

<?php
require_once 'db_login.php'; //get login details for the database

$db_server = new mysqli($db_hostname, $db_username, $db_password, $db_database)or die('There was a problem connecting to the database');

$query = "
SELECT sensorID,timeStamp,theDate,theDay,theHour,avgTemp,avgHumidity,avgLight,avgOccupied
FROM
(
  select
    `sensor_id` AS sensorID,
    `value_date` AS timeStamp,
    DAY(`value_date`) AS theDate,
    DAYNAME(`value_date`) AS theDay,
    HOUR(`value_date`) AS theHour, 
    AVG(`value_temp`) AS avgTemp,
    AVG(`value_humidity`) AS avgHumidity,
    AVG(`value_light`) AS avgLight,
    AVG(`value_PIR`) AS avgOccupied
  FROM sensor_value
  WHERE `value_date` >= (NOW() - INTERVAL 7 DAY)
  AND `value_date` < NOW()
  GROUP BY sensorID,theDate,theHour
) s
GROUP BY sensorID,theDate,theHour; 
";

$result = $db_server->prepare($query);
$result->execute();
$result->bind_result($sensorID, $timeStamp, $theDate, $theDay, $theHour, $avgTemp, $avgHumidity, $avgLight, $avgOccupied);
while ($result->fetch()) 
{
//if($theHour<1) $theHour=0.000001;

//    $data[$sensorID][$theDate][$theDay][$theHour] = array(
//      "Temp" => $avgTemp,
//      "Humidity" => $avgHumidity,
//      "Light" => $avgLight,
//      "Occupied" => $avgOccupied
//    );


      $data[]['ID'] = array(
                "SensorID" => $sensorID,
                "DateID" => array(
                  "Date" => $theDate,
                  "Day" => $theDay,
                  "HourID" => array(
                    "Hour" => $theHour,
                    "Results" => array(
                      "Temp" => $avgTemp,
                      "Humidity" => $avgHumidity,
                      "Light" => $avgLight,
                      "Occupied" => $avgOccupied
                    ),
                  ),
                ),
        );

    );

}

header("content-type: application/json");
echo json_encode($data, JSON_PRETTY_PRINT);

$db_server->close();
?>
如何将结果嵌套在同一传感器下,然后嵌套在同一天下

我从以下代码开始:

while ($result->fetch()) 
{
    $data[$sensorID][$theDate][$theDay][$theHour] = array(
      "Temp" => $avgTemp,
      "Humidity" => $avgHumidity,
      "Light" => $avgLight,
      "Occupied" => $avgOccupied
    );
}
有我想要的那种正确的嵌套,但并没有键,所以我发现很难实际使用结果。剪掉上面的代码:

{
    "123456789012": {
        "16": {
            "Sunday": {
                "16": {
                    "Temp": "21.314019",
                    "Humidity": "66.471028",
                    "Light": "673.0561",
                    "Occupied": "0.1402"
                },
                "17": {
                    "Temp": "21.927350",
                    "Humidity": "63.827350",
                    "Light": "649.4188",
                    "Occupied": "0.0684"
                },
                "18": {
                    "Temp": "22.291525",
                    "Humidity": "63.710169",
                    "Light": "615.2712",
                    "Occupied": "0.0339"
                },
                "19": {
                    "Temp": "21.324576",
                    "Humidity": "64.744068",
                    "Light": "468.7542",
                    "Occupied": "0.0085"
                },
                "20": {
                    "Temp": "20.801709",
                    "Humidity": "67.853846",
                    "Light": "401.1197",
                    "Occupied": "0.0000"
                },
                "21": {
                    "Temp": "20.383051",
                    "Humidity": "68.610169",
                    "Light": "183.9407",
                    "Occupied": "0.0000"
                },
                "22": {
                    "Temp": "20.104237",
                    "Humidity": "69.753390",
                    "Light": "16.9068",
                    "Occupied": "0.0000"
                },
                "23": {
                    "Temp": "19.939831",
                    "Humidity": "70.229661",
                    "Light": "133.5678",
                    "Occupied": "0.0000"
                }
            }
        },
        "17": {
            "Monday": [
                {
                    "Temp": "19.728205",
                    "Humidity": "70.501709",
                    "Light": "8.0000",
                    "Occupied": "0.0000"
                },
    ......etc....
    ]
我已经尝试添加一个foreach循环来嵌套数据,但无法构造一个合适的函数来工作

有人能帮我创建这个阵列吗?还是我让自己的生活很艰难?我应该转到多个查询吗

已编辑 期望输出:

[
    {
        "ID": {
            "SensorID": 123456789012,
            "DateID": {
                "Date": 16,
                "Day": "Sunday",
                "HourID": {
                    "Hour": 17,
                    "Results": {
                        "Temp": "21.965217",
                        "Humidity": "62.708696",
                        "Light": "649.1449",
                        "Occupied": "0.0725"
                    }
                    "Hour": 18,
                    "Results": {
                        "Temp": "22.291525",
                        "Humidity": "63.710169",
                        "Light": "615.2712",
                        "Occupied": "0.0339"
                    }
                    "Hour": 19,
                    "Results": {
                        "Temp": "21.324576",
                        "Humidity": "64.744068",
                        "Light": "468.7542",
                        "Occupied": "0.0085"
                    }
                }
            }
        }
    },
....etc....
]

你想要什么结构?与列出的第一个输出相同,但我不希望重复传感器ID或重复一天。呃…看起来你已经这样做了。但是如何使用所需的关键帧获得正确的嵌套?每个对象的关键帧不能超过1个“小时”。
[
    {
        "ID": {
            "SensorID": 123456789012,
            "DateID": {
                "Date": 16,
                "Day": "Sunday",
                "HourID": {
                    "Hour": 17,
                    "Results": {
                        "Temp": "21.965217",
                        "Humidity": "62.708696",
                        "Light": "649.1449",
                        "Occupied": "0.0725"
                    }
                    "Hour": 18,
                    "Results": {
                        "Temp": "22.291525",
                        "Humidity": "63.710169",
                        "Light": "615.2712",
                        "Occupied": "0.0339"
                    }
                    "Hour": 19,
                    "Results": {
                        "Temp": "21.324576",
                        "Humidity": "64.744068",
                        "Light": "468.7542",
                        "Occupied": "0.0085"
                    }
                }
            }
        }
    },
....etc....
]