Php 循环数组(列)并在新数组上保存结果

Php 循环数组(列)并在新数组上保存结果,php,arrays,charts,Php,Arrays,Charts,我正在使用ChartJS制作阶梯线图,但在将数据发送到图形时遇到了一些问题 这是我的数据结构: { "records": [ { "id": "rec3bFzlHuDdId1rW", "fields": { "RAMPA": "1", &qu

我正在使用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,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代码模拟输入和输出。谢谢您,我再次编辑了。。。我甚至不知道是否有可能实现我想做的事情