我正在使用ChartJS制作阶梯线图,但在将数据发送到我的图表时遇到了一些问题。
这是我的数据结构:
{
"records": [
{
"id": "rec3bFzlHuDdId1rW",
"fields": {
"RAMPA": "1",
"VIAJE": [
"recDIax2GkKfVs4G0"
],
"ACTUALIZACION": [
"recuL8WNpXtdhrtyU",
"rec3noGgAthIDtyYS"
],
"VIAJE 2": [
"recDIax2GkKfVs4G0",
"recqV0qm47g0ZiDk4"
],
"DT": [
"98249184"
],
"LIN": [
445
],
"CITA DE ENRRAMPE": [
"2020-11-07T17:48:00.000Z"
],
"TIMEPO DE USO SEMANA": 88920,
"TIEMPO DE DESUSO SEMANA": 484080,
"USOS SEMANA": 1,
"SALIDA DE CARGA": [
"2020-11-08T02:00:00.000Z"
],
"Field 14": [
"98249184",
"6546526534"
],
"ENRRAMPE": [
"ENRRAMPE TARDIO"
],
"ENRRAMPES TARDIOS DIA": 1,
"VALOR1HISTORICO": [
1,
0
],
"VALOR2": [
"15:10",
"15:51"
]
},
"createdTime": "2020-10-23T18:43:45.000Z"
},
}到目前为止,我可以使用这段代码遍历它:
foreach($airtable_response['records'] as $key => $record)
{
$string.= $record['fields']['VALOR2'][0] . ', ';
$labels.= '"' . $record['fields']['VALOR1HISTORICO'][0] . '", ';
}
$data = trim($string, ",");
$labels = trim($labels, ",");但我只需要从VALOR2获取每个寄存器示例存储的数据,它只有两个值,获取值"15:10“和"15:51”,并将存储在那里的n个值发送到我的新数组中,以便图形可以接受它们。
编辑:
当我回显变量$labels和$data时,我得到了这些值
$labels
15:10,15:10,15:10,15:10,13:15,15:10,
$data
"1","1","1","1","1","1","1","1",
但是这些是来自8个记录的第一个值,我想要的是
标签
15:10,15:51
数据
1,0
每条记录都属于一个记录,依此类推
这是我的数据完整结构的一部分:(这是一条记录)
"VALOR1HISTORICO":[
1,
0
],
"VALOR2":[
"15:10",
"15:51"
]
},
(this is one record)
"VALOR1HISTORICO":[
1
],
"VALOR2":[
"15:10"
]
(this is one record)
"VALOR1HISTORICO":[
1
],
"VALOR2":[
"15:10"
]
(this is one record)
"VALOR1HISTORICO":[
1
],
"VALOR2":[
"15:10"
]
(this is one record)
"VALOR1HISTORICO":[
1
],
"VALOR2":[
"15:10"
]
(this is one record)
"VALOR1HISTORICO":[
1
],
"VALOR2":[
"15:10"
]
(this is one record)
"VALOR1HISTORICO":[
1,
0,
1,
0,
1,
0,
1
],
"VALOR2":[
"13:15",
"13:16",
"15:10",
"12:20",
"12:20",
"12:20",
"12:21"
]为我带来for each循环的格式是:
15:10,15:51,15:10,,15:10,,15:10,,15:10,,15:10,,13:15,13:16,15:10,我想带来的是
$labels ["15:10","15:51"],
$data[1,0]然后再次循环,并为其他记录带来另一个数据
$labels ["15:10"],
$data["1"]属于另一条记录的其他数组
$labels ["15:10""],
$data["1"]这个数据我希望为每个$label,$data生成一个图。
这是将接收每个数据的ChatJS:
<body>
<div class="container">
<div class="row">
<div class="col m8 offset-m2 s12" style="margin-top: 100px;">
<div class="airtable">
<canvas height="200" id="myChart2" width="200"></canvas>
<script>
var ctx = document.getElementById("myChart2");
var myChart = new Chart(ctx, {
type: 'line',
data: {
labels:[<?php echo $labels; ?>],
datasets: [{
label: ' Tiempos de traslado ',
data: [<?php echo $data; ?>],
steppedLine:true,
backgroundColor: [
'rgba(255, 99, 132, 0.2)',
],
borderColor: [
'rgba(255,99,132,1)',
],
borderWidth: 1
}]
},
options: {
scales: {
yAxes: [{
ticks: {
beginAtZero:true
}
}]
}
}
});
</script>
</div>
</div>
</div>
</body>发布于 2020-11-11 10:07:45
你构造字符串太早了。解析和操作字符串比操作数组更难。您应该首先将数据聚合为中间数组格式。由于值存储在键的子数组中,因此可以使用array_merge来合并值:
$valor2s = [];
$valor1historico = [];
foreach($airtable_response['records'] as $key => $record) {
array_merge($valor2s, $record['fields']['VALOR2'][0]);
array_merge($valor1historicos, '"' . $record['fields']['VALOR1HISTORICO'][0] . '"');
}如果我没看错的话,您想要VALOR2和VALOR1HISTORICO的唯一值。您可以使用array_unique清理这两个数组:
$valor2s_unique = array_unique($valor2s);
$valor1historicos_unique = array_unique($valor1historicos);然后,您可以使用implode将数组连接到逗号分隔的列表字符串
$data = implode(', ', $valor2s_unique);
$labels = implode(', ', $valor1historicos_unique);根据您演示的数据,您应该获得以下变量:
15:10, 13:15
"1", "0"https://stackoverflow.com/questions/64779027
复制相似问题