PHP 数组重新格式化为 highchart json ob



我正在尝试将数组格式化为Highcharts支持的JSON对象。我的数据库中的数组如下:

Array
(
    [0] => Array
        (
            [Group_ID] => 1
            [Name] => A line graph
            [month] => 4
            [amount] => 7700
        )
    [1] => Array
        (
            [Group_ID] => 2
            [Name] => B Line graph
            [month] => 4
            [amount] => 390
        )
    [2] => Array
        (
            [Group_ID] => 1 
            [Name] => A line graph
            [month] => 5
            [amount] => 5000
        )
    [3] => Array
        (
            [Group_ID] => 2
            [Name] => B line graph
            [month] => 5
            [amount] => 210
        )
)

我需要创建一个这样的数组才能创建一个与 highchart 兼容的 JSON 对象:

Array
(
    [0] => Array
        (
            [name] => A revenue
            [data] => Array
                (
                    [4] => 7700 //amount for the fourth month
                    [5] => 5000 //amount for the fifth month
                )
        )
    [1] => Array
        (
            [name] => B revenue
            [data] => Array
                (
                    [4] => 390 //amount for the fourth month
                    [5] => 210 //amount for the fifth month
                )
        )
)

我已经设法使用我的foreach想出了这个数组,但我似乎找不到正确执行此操作的方法:

Array
(
    [0] => Array
        (
            [name] => A line graph
            [amount] => 7700
            [month] => 4
        )
    [1] => Array
        (
            [name] => B line graph
            [amount] => 390
            [month] => 4
        )
    [2] => Array
        (
            [name] => A line graph
            [amount] => 5000
            [month] => 5
        )
    [3] => Array
        (
            [name] => B line graph
            [amount] => 210
            [month] => 5
        )
)

我的前辈:

 foreach ($data as $key => $value) {
        $r[] = [
            'name' => $value['Line_GraphName'],
            'data' => $value['amount'],
            'month' => $value['month']
        ];
 }

您可以像这样非常简单地创建它:

foreach ($data as $value) {
    $r[$value['Group_ID']]['name'] = $value['Line_GraphName']; 
    $r[$value['Group_ID']]['data'][$value['month']] = $value['amount'];
}
  • 循环并使用 Group_ID 作为键创建结果,并添加name键和值
  • data数组添加并将month追加为键,将amount追加为值

如果您不喜欢将 Group_ID 作为键并希望重新编制索引:

$r = array_values($r);

使用 array_walkarray_values 函数的解决方案:

$result = [];
array_walk($data, function($v) use(&$result) {
    $key = $v['Group_ID'] . $v['Name'][0];  // compound key: "group_id + revenue's prefix"
    if (!isset($result[$key])) {
        $result[$key] = ['name' => $key[1] . " Revenue", 'data' => [$v['month'] => $v['amount']]];
    } else {
        $result[$key]['data'][$v['month']] = $v['amount'];
    }
});
print_r(array_values($result));

输出:

Array
(
    [0] => Array
        (
            [name] => A Revenue
            [data] => Array
                (
                    [4] => 7700
                    [5] => 5000
                )    
        )    
    [1] => Array
        (
            [name] => B Revenue
            [data] => Array
                (
                    [4] => 390
                    [5] => 210
                )
        )
)

最新更新