首页 > 解决方案 > 循环槽并修改 JSON 响应

问题描述

我正在向 Google 表格发出 API 请求,并收到以下回复:

Array
(
    [0] => Array
        (
            [Title] => Hours
            [January] => 1
            [February] => 2
            [March] => 3
            [April] => 4
            [May] => 5
            [June] => 6
            [July] => 7
            [August] => 8
        )

    [1] => Array
        (
            [Title] => Days
            [January] => 3
            [February] => 5
            [March] => 1
            [April] => 6
            [May] => 3
            [June] => 7
            [July] => 4
            [August] => 2
        )

    [2] => Array
        (
            [Title] => Weeks
            [January] => 3
            [February] => 5
            [March] => 3
            [April] => 4
            [May] => 0
            [June] => 0
            [July] => 2
            [August] => 6
            [September] => 0
            [October] => 0
            [November] => 1
            [December] => 0
        )

)

我怎样才能循环槽并将这个数组修改为这样的东西,以便我可以将它与 HighCharts JS 库一起使用?

series: [{
        title: 'Hours',
        data: [1, 2, 3, 4, 5, 6 .......]

    }, {
        title: 'Days',
        data: [4, 6, 3, 6, ........]

    }, {
        title: 'Weeks',
        data: [1, 9, 1, 3, ........]

    }, {

       ....

    }]

我试过这样:

if ($response->status) {
            $rawData = json_decode(json_encode($response->data), true);
        }

        $series = [];

        foreach ($rawData as $index => $rawDatum) {

            if (!isset($rawDatum['Title'])) {
                continue;
            }

            foreach ($rawDatum as $columnKey => $value) {

                if ($columnKey == 'CvA') {
                    $series[$columnKey]['Title'][] = $value;
                }

                

            }
            
        }

我得到的结果:

Array
(
    [Title] => Array
        (
            [title] => Array
                (
                    [0] => Hours
                    [1] => Days
                    [2] => Weeks
                )

        )

)

还有一种方法可以让所有月份的名称保存在 $months 数组中,例如没有双打?

标签: phparraysjson

解决方案


以下代码将创建一个数组,其中包含标题和每个子数组 Hours、Days、Weeks 的值。

我们还将在名为 的数组中收集月份的并集$months

$series = [];
$months = [];

foreach ($rawData as $subarray) {
    $title = $subarray['Title'];
    // Remove title key
    unset($subarray['Title']);

    $series[] = [
        'title' => $title,
        'data' => array_values($subarray),
    ];

    // Union operator to keep unique months.
    $months += array_keys($subarray);
}

echo '<pre>';
print_r($months);
echo '</pre>';

echo '<pre>';
print_r($result);
echo '</pre>';

结果$months

Array
(
    [0] => January
    [1] => February
    [2] => March
    [3] => April
    [4] => May
    [5] => June
    [6] => July
    [7] => August
    [8] => September
    [9] => October
    [10] => November
    [11] => December
)

结果$series

Array
(
    [0] => Array
        (
            [title] => Hours
            [data] => Array
                (
                    [0] => 1
                    [1] => 2
                    [2] => 3
                    [3] => 4
                    [4] => 5
                    [5] => 6
                    [6] => 7
                    [7] => 8
                )

        )

    [1] => Array
        (
            [title] => Days
            [data] => Array
                (
                    [0] => 3
                    [1] => 5
                    [2] => 1
                    [3] => 6
                    [4] => 3
                    [5] => 7
                    [6] => 4
                    [7] => 2
                )

        )

    [2] => Array
        (
            [title] => Weeks
            [data] => Array
                (
                    [0] => 3
                    [1] => 5
                    [2] => 3
                    [3] => 4
                    [4] => 0
                    [5] => 0
                    [6] => 2
                    [7] => 6
                    [8] => 0
                    [9] => 0
                    [10] => 1
                    [11] => 0
                )

        )

)

推荐阅读