Php 循环数组(列)并在新数组上保存结果
我正在使用ChartJS制作阶梯线图,但在将数据发送到图形时遇到了一些问题 这是我的数据结构:Php 循环数组(列)并在新数组上保存结果,php,arrays,charts,Php,Arrays,Charts,我正在使用ChartJS制作阶梯线图,但在将数据发送到图形时遇到了一些问题 这是我的数据结构: { "records": [ { "id": "rec3bFzlHuDdId1rW", "fields": { "RAMPA": "1", &qu
{
"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,15:10,15:10,13:15,15:10 $data
“1”、“1”、“1”、“1”、“1”、“1”、“1”、“1”、“1”、“1”、“1” 但这些是8条记录中的第一个值,我只想带来 标签
15:10,15:51 数据
1,0 其中属于一个记录,每个记录,等等 这是我数据完整结构的一部分:(这是一条记录) 给我带来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"]
再次说明属于其他记录的其他数组
$labels ["15:10"],
$data["1"]
$labels ["15:10""],
$data["1"]
我希望这些数据每$label$data生成一个图形
这是将接收所有数据的聊天室:
<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>
var ctx=document.getElementById(“myChart2”);
var myChart=新图表(ctx{
键入:“行”,
数据:{
标签:[],
数据集:[{
标签:'Tiempos de traslado',
数据:[],
是的,
背景颜色:[
"rgba(255,99,132,0.2)",,
],
边框颜色:[
"rgba(255,99132,1)",,
],
边框宽度:1
}]
},
选项:{
比例:{
雅克斯:[{
滴答声:{
贝吉纳泽罗:是的
}
}]
}
}
});
您构建字符串太早了。解析和操作字符串比操作数组更难。您应该首先将数据聚合为中间数组格式。由于值存储在键的子数组中,因此可以使用来合并值:
$valor2s=[];
$valor1historico=[];
foreach($airtable_response['records']作为$key=>$record){
数组合并($valor2s,$record['fields']['VALOR2'][0]);
数组_merge($valor1historicos,“.”.$record['fields']['VALOR1HISTORICO'][0].“);
}
如果我没看错的话,你想要VALOR2和VALOR1HISTORICO的独特价值。您可以使用清理2个阵列:
$valor2s_unique=数组_unique($valor2s);
$valor1historicos_unique=数组_unique($valor1historicos);
然后,您可以使用以下命令将数组连接到逗号分隔的列表字符串:
$data=内爆(',',$valor2s_unique);
$labels=内爆(“,”,$valor1historicos_unique);
根据您演示的数据,您应该获得以下变量:
15:10, 13:15
"1", "0"
您能否提供一个示例输入和它的预期输出?是否有任何方法可以访问“VALOR1HISTORICO”和“VALOR2”以及保存到新数组中的这些值?我试图从这些值中获取两个新数组您的代码已经在访问VALOR1HISTORICO和VALOR2。您可以将它们附加到新数组中,对吗?您的困难是什么?以及“新数组”应该是什么样子?谢谢,但此信息是为了构建一个阶梯式折线图,以便允许重复值,似乎我没有解释自己,每个记录在这些情况下都有不同的值,1和0就像每个寄存器(事件)的标志一样工作必须有自己的图形,这就是为什么我需要为每个寄存器构建一个数组,其中有多个由“,”VALOR1HISTORICO“:[1,0],”VALOR2“:[“15:10”,“15:51”]这是两条记录,每条记录上有两个数组,每条记录一个,构建它们的图形一个是$labels,一个是fro$dataPlease用正确的php代码格式模拟预期的结果数组。我无法真正理解您对预期结果的解释。解释问题的最佳方法是用正确的php代码模拟输入和输出。谢谢您,我再次编辑了。。。我甚至不知道是否有可能实现我想做的事情