首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >循环数组(列)并将结果保存到新数组中

循环数组(列)并将结果保存到新数组中
EN

Stack Overflow用户
提问于 2020-11-11 09:03:28
回答 1查看 51关注 0票数 0

我正在使用ChartJS制作阶梯线图,但在将数据发送到我的图表时遇到了一些问题。

这是我的数据结构:

代码语言:javascript
复制
{ 
    "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"
        },
}

到目前为止,我可以使用这段代码遍历它:

代码语言:javascript
复制
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

每条记录都属于一个记录,依此类推

这是我的数据完整结构的一部分:(这是一条记录)

代码语言:javascript
复制
       "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循环的格式是:

代码语言:javascript
复制
15:10,15:51,15:10,,15:10,,15:10,,15:10,,15:10,,13:15,13:16,15:10,

我想带来的是

代码语言:javascript
复制
$labels ["15:10","15:51"], 
$data[1,0]

然后再次循环,并为其他记录带来另一个数据

代码语言:javascript
复制
  $labels ["15:10"], 
    $data["1"]

属于另一条记录的其他数组

代码语言:javascript
复制
 $labels ["15:10""], 
    $data["1"]

这个数据我希望为每个$label,$data生成一个图。

这是将接收每个数据的ChatJS:

代码语言:javascript
复制
<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>
EN

回答 1

Stack Overflow用户

发布于 2020-11-11 10:07:45

你构造字符串太早了。解析和操作字符串比操作数组更难。您应该首先将数据聚合为中间数组格式。由于值存储在键的子数组中,因此可以使用array_merge来合并值:

代码语言:javascript
复制
$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清理这两个数组:

代码语言:javascript
复制
$valor2s_unique = array_unique($valor2s);
$valor1historicos_unique = array_unique($valor1historicos);

然后,您可以使用implode将数组连接到逗号分隔的列表字符串

代码语言:javascript
复制
$data = implode(', ', $valor2s_unique);
$labels = implode(', ', $valor1historicos_unique);

根据您演示的数据,您应该获得以下变量:

代码语言:javascript
复制
15:10, 13:15
"1", "0"
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/64779027

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档