数组中的图形表示逻辑

时间:2019-04-30 13:11:46

标签: php arrays string google-visualization google-chartwrapper

从数据库值生成的数组输出。

Array ( [0] => Array ( [seldate] => 2019-04-28 [count] => 268 ) 
        [1] => Array ( [seldate] => 2019-04-29 [count] => 366 ) 
        [2] => Array ( [seldate] => 2019-04-30 [count] => 85 ) 
        [3] => Array ( [seldate] => 2019-04-28 [count] => 93 ) 
        [4] => Array ( [seldate] => 2019-04-29 [count] => 82 ) 
        [5] => Array ( [seldate] => 2019-04-30 [count] => 31 ) 
        [6] => Array ( [seldate] => 2019-04-28 [count] => 44 ) 
        [7] => Array ( [seldate] => 2019-04-29 [count] => 44 ) 
        [8] => Array ( [seldate] => 2019-04-30 [count] => 22 ) )

我需要在下面创建 google LineChart的数组上面的字符串输出。

"['2019-04-28',  268, 93, 44],
['2019-04-29',  366, 82, 44],
['2019-04-30',  85, 31, 22]"

请帮助创建PHP代码逻辑。

2 个答案:

答案 0 :(得分:2)

首先准备数组,将其作为键作为日期,将值作为值。
然后再次循环,并将这些行写入包含内插值的新数组。

最后输出内含在逗号和换行符之间的行。

foreach($rows as $r){
    $dates[$r['seldate']][] = $r['count'];
}

foreach($dates as $date => $vals){
    $lines[] = "['" . $date . "', " . implode(", ", $vals) . "]";
}

echo implode(",\n", $lines);

输出:

['2019-04-28', 268, 93],
['2019-04-29', 366],
['2019-04-30', 85]

https://3v4l.org/14smE

答案 1 :(得分:0)

您可以使用array_walk遍历数组

$result = [];
array_walk($arr, function($item) use(&$result){
    if(empty($result[$item['seldate']])){ // if empty add date and count for initialisation
        $result[$item['seldate']] = [$item['seldate'], $item['count']]; 
    }else{
        $result[$item['seldate']][] = $item['count'];   // just append value to same key as date as we are grouping it by date
    }
});
$result = array_values($result); // to remove date keys
print_r($result);

输出

Array
(
    [0] => Array
        (
            [0] => 2019-04-28
            [1] => 268
            [2] => 93
            [3] => 44
        )

    [1] => Array
        (
            [0] => 2019-04-29
            [1] => 366
            [2] => 82
            [3] => 44
        )

    [2] => Array
        (
            [0] => 2019-04-30
            [1] => 85
            [2] => 31
            [3] => 22
        )

)

Demo

注意:如果要将这些数据用于线图,请在输出上方json_encode