我有一个由以下内容组成的数组 $data:
$data[$k]['id'] = $row['iddevice'];
$data[$k]['temp_00'] = $row['temp_00'];
$data[$k]['temp_01'] = $row['temp_01'];
$data[$k]['temp_02'] = $row['temp_02'];
$data[$k]['temp_03'] = $row['temp_03'];
$data[$k]['temp_04'] = $row['temp_04'];
我这个数组中只有两个元素,所以echo count($data);
会返回2
我正在使用 Morris.js 创建一个折线图,下面是一个可工作的代码示例:
$(function() {
Morris.Line({
element: 'morris-area-chart',
data: [
{ y: '00h', 1:57, 2:41},
{ y: '01h', 1:62, 2:98},
{ y: '02h', 1:44, 2:43},
{ y: '03h', 1:67, 2:84},
],
xkey: 'y',
parseTime:false,
ykeys: [1,2,3],
pointSize: 2,
hideHover: 'auto',
labels: ['Capteur X', 'Capteur Y']
});
我的问题是,一旦我尝试使用PHP来使用从$data
中获取的值,它就不起作用了,图表不会加载任何值。
Morris.Line({
element: 'morris-area-chart',
data: [
{ y: '00h', <?php $i = 0; while ($i <= count($data)-1) { echo $data[$i]['id'].":".round($data[$i]['temp_00'],2); $i++; }?>},
{ y: '01h', <?php $i = 0; while ($i <= count($data)-1) { echo $data[$i]['id'].":".round($data[$i]['temp_01'],2); $i++; }?>},
{ y: '02h', <?php $i = 0; while ($i <= count($data)-1) { echo $data[$i]['id'].":".round($data[$i]['temp_02'],2); $i++; }?>},
{ y: '03h', <?php $i = 0; while ($i <= count($data)-1) { echo $data[$i]['id'].":".round($data[$i]['temp_03'],2); $i++; }?>},
],
对我来说,这个算法是可以的:
- $i 等于 0
- 当
$i
小于等于count($data)-1
时(所以2-1 = 1,我们应该循环两次) - 显示此元素的 ID 和温度值
- 将
$i
加一
我在思考或做错了什么吗?
此外,当我将 $i
初始化为 1 而不是 0 时,我可以获得我的 $data
数组中第二个条目的值。
(我更喜欢说我不是开发人员,因此此代码可能不是最简洁的,我同意)
编辑:
Pastebin to the
var_dump
of$data
: http://pastebin.com/dYNtLxqXScreenshot when using Forbs' solution (Chart doesn't load at all) :
The SQL query I am using to populate
$data
Array :select iddevice, data.ip, type, description, avg(case when hour(date) = 00 then temp end) as temp_00, avg(case when hour(date) = 01 then temp end) as temp_01, avg(case when hour(date) = 02 then temp end) as temp_02, ... avg(case when hour(date) = 22 then temp end) as temp_22, avg(case when hour(date) = 23 then temp end) as temp_23 from data, device where date >= '2017-03-20' and date < '2017-03-21' and device.ip = data.ip group by ip order by iddevice;
The Array is populate with this query using a while loop
$results = $conn->query($sql); $k = 0; $data = array(); while ($row = $results->fetch_assoc()) { $data[$k]['temp_00'] = $row['temp_00']; $data[$k]['temp_01'] = $row['temp_01']; $data[$k]['temp_02'] = $row['temp_02']; $data[$k]['temp_03'] = $row['temp_03']; ... $k++; }
$data
变量上发布一个var_dump
。 - Wes Foster$s
而不是$i
,$data[$s]['temp_00']
,也许这就是问题所在。 - Titus$i
/$s
的错误是由于我尝试了很多故障排除,但不幸的是它并不是问题所在。我还添加了一个pastebin到Array var_dump中。 - Will$row
是从哪里来的呢?是从数据库查询吗?如果你能添加一点更多的代码来展示$row
如何被填充,我可以向你展示一种不同的将数据从 PHP 传递到 JS 的方法,这可能会更容易。 - Don't Panic$data
数组的SQL查询。但是因为当我手动执行echo $data[0]['id']
或echo $data[1]['temp_00']
时,我可以访问到存储在$data
数组中的值,所以我认为它们没有关联 :/ - Will