从字符串中提取值以分配到数组中

Pull values from string to assign into an array

我有一个项目,我使用 salesforce 的 RestAPI 从 SOQL 中提取数据。我已经清理了响应,这就是我目前正在处理的内容:

Created:2021-03-02,Tracks:1,Created:2021-02-23,Tracks:3,Created:2021-02-20,Tracks:4,Created:2021-02-16,Tracks:41,Created:2021-02-06,Tracks:1,Created:2021-02-02,Tracks:3,Created:2021-02-01,Tracks:2,Created:2021-01-29,Tracks:1,Created:2021-01-22,Tracks:1,Created:2021-01-19,Tracks:1,Created:2021-01-15,Tracks:1,Created:2021-01-14,Tracks:1,Created:2021-01-13,Tracks:1

我在 PHP 工作,我想根据这些数据构建一个数组。例如:

graph_data = array(
          array("Created" => array("2021-03-02","2021-02-23","2021-02-20","2021-02-16")),
          array("Tracks" => array(1,3,4,41,1)));

有人对此有什么建议吗?我试过做一些正则表达式,但我认为这不是正确的解决方案。最初,我把它作为一个对象取回,但没有干净的方法将它们放入关联数组,因为 json_decode 和 json_encode 不起作用。

作为参考,我正在基于此动态数据构建图表,需要将创建的日期作为 x 轴,将轨道作为 y 轴。

这可以使用内置的 PHP 函数来实现:

explode() and array_chunk()

<?php
$str = 'Created:2021-03-02,Tracks:1,Created:2021-02-23,Tracks:3,Created:2021-02-20,Tracks:4,Created:2021-02-16,Tracks:41,Created:2021-02-06,Tracks:1,Created:2021-02-02,Tracks:3,Created:2021-02-01,Tracks:2,Created:2021-01-29,Tracks:1,Created:2021-01-22,Tracks:1,Created:2021-01-19,Tracks:1,Created:2021-01-15,Tracks:1,Created:2021-01-14,Tracks:1,Created:2021-01-13,Tracks:1
';

$arr = explode(',', $str);
$temp = array_chunk($arr, 2);
$finalArray = [];
$i=0;
if (! empty($temp)) {
    foreach ($temp as $elem) {
        if (! empty($elem)) {
            foreach ($elem as $secondary) {
                $tempSecondary = explode(':', $secondary);
                $finalArray[$i][$tempSecondary[0]] = $tempSecondary[1];
            }
        }
                ++$i;
    }
}
echo '<pre>';print_r($finalArray);echo '</pre>';

输出:

Array
(
    [0] => Array
        (
            [Created] => 2021-03-02
            [Tracks] => 1
        )

    [1] => Array
        (
            [Created] => 2021-02-23
            [Tracks] => 3
        )

    [2] => Array
        (
            [Created] => 2021-02-20
            [Tracks] => 4
        )

    [3] => Array
        (
            [Created] => 2021-02-16
            [Tracks] => 41
        )

    [4] => Array
        (
            [Created] => 2021-02-06
            [Tracks] => 1
        )

    [5] => Array
        (
            [Created] => 2021-02-02
            [Tracks] => 3
        )

    [6] => Array
        (
            [Created] => 2021-02-01
            [Tracks] => 2
        )

    [7] => Array
        (
            [Created] => 2021-01-29
            [Tracks] => 1
        )

    [8] => Array
        (
            [Created] => 2021-01-22
            [Tracks] => 1
        )

    [9] => Array
        (
            [Created] => 2021-01-19
            [Tracks] => 1
        )

    [10] => Array
        (
            [Created] => 2021-01-15
            [Tracks] => 1
        )

    [11] => Array
        (
            [Created] => 2021-01-14
            [Tracks] => 1
        )

    [12] => Array
        (
            [Created] => 2021-01-13
            [Tracks] => 1

        )

)

解释:

  1. 用逗号分隔字符串。

  2. 现在,使用array_chunk() 函数将数组拆分为两个长度的元素。

  3. 将拆分后的数组追加到结果数组中。

explode()foreach()

的解决方案
$arr = explode(',', $str);
$finalArray = [];


foreach($arr as $ar){
    $againExplode = explode(':',$ar);
    $finalArray[$againExplode[0]][] = $againExplode[1];
}

print_r($finalArray);

输出:https://3v4l.org/JoeJK