В настоящее время у меня есть база данных mysql, которая содержит данные об использовании диска для различных имен хостов.
Я очень плохо знаком с PHP и Javascript, поэтому заранее извиняюсь. Пожалуйста, дайте мне знать, если я должен включить дополнительную информацию.
Пример таблицы использования:
+-------+---------------------+-------------+-----------+
| runid | timestamp | utilization | hostname |
+-------+---------------------+-------------+-----------+
| 43 | 2018-11-22 01:00:05 | 3 | name1.host|
| 43 | 2018-11-22 01:00:19 | 10 | name2.host|
| 43 | 2018-11-22 01:00:29 | 11 | name3.host|
| 43 | 2018-11-22 01:00:38 | 13 | name4.host|
| 43 | 2018-11-22 01:00:45 | 13 | name5.host|
| 43 | 2018-11-22 01:00:49 | 15 | name6.host|
| 43 | 2018-11-22 01:00:58 | 14 | name7.host|
| 43 | 2018-11-22 01:01:04 | 4 | name8.host|
| 43 | 2018-11-22 01:01:11 | 4 | name9.host|
Для каждого имени хоста с уникальными временными метками существует более 1000 записей.
Также можно изменить имя и количество имен хостов. Поэтому я не смогу просто написать код для указанных имен.
Я хотел бы создать новую таблицу Highchart для каждого имени хоста и соответствующих ему данных.
Я полагаю, что получил свой phpмассив в правильном формате (однако я не уверен, что это правильная практика), но у меня возникают проблемы с использованием массива в Javascript.
Сначала я создал массив, содержащий необходимые имена хостов, связанные с заданным runid(первичный ключ).
Выдержка из кода PHP
<?php
// Get a list of all hostnames for a given runid
$hostnameListSql = "SELECT DISTINCT hostname from diskutilization where runid = $runId;";
$host_name = array();
$data = array();
$hostnameResult = $conn->query($hostnameListSql);
while($row = $hostnameResult->fetch_assoc()) {
extract($row);
$host_name[] = "$hostname";
}
// Iterate through the host_name array and get the associated utilization data for each hostname
foreach($host_name as $hostName) {
echo "<div id=container_$hostName style='min-width: 400px; height: 500px; margin: 0 auto;'>$hostName</div>";
$dataSql = "SELECT * from diskutilization where runid = $runId and hostname = '$hostName';";
$dataResult = $conn->query($dataSql);
while($row = $dataResult->fetch_assoc()) {
extract($row);
$data[$hostName] = array("timestamp"=>$timestamp, "hostname"=>$hostname, "utilization"=>$utilization);
print_r($data[$hostName]);
}
}
?>
Когда я печатаю массив, он выводит правильные данные внутри каждого тега div (все 1000+ строк).
Вывод структуры массива:
Array ( [timestamp] => 2018-11-22 01:00:05 [hostname] => name1.host [utilization] => 3 )Array ( [timestamp] => 2018-11-22 01:05:05 [hostname] => name1.host [utilization] => 4 )...
Array ( [timestamp] => 2018-11-22 01:05:05 [hostname] => name2.host [utilization] => 3 ) Array ( [timestamp] => 2018-11-22 01:05:05 [hostname] => name2.host [utilization] => 5 )...
...
Но как только я использую json_encode и перебираю массив $ data в Javascript, он содержит только последнее значение.
Я планирую использовать следующий поток, чтобы помочь сгенерироватьдиаграммы, как только у меня есть данные в правильном формате: Как сделать несколько диаграмм, используя высокие диаграммы в цикле?
Редактировать:
Вот результат var_dump ($ data ['name1.host']);
array(1152) { [0]=> array(3) { ["timestamp"]=> string(19) "2018-11-22 01:00:05" ["hostname"]=> string(9) "name1.host" ["utilization"]=> string(1) "3" } [1]=> array(3) { ["timestamp"]=> string(19) "2018-11-22 01:05:05" ["hostname"]=> string(9) "name1.host" ["utilization"]=> string(1) "3" } [2]=> array(3) { ["timestamp"]=> string(19) "2018-11-22 01:10:05" ["hostname"]=> string(9) "name1.host" ["utilization"]=> string(1) "3" }