每年获得一个数组

时间:2015-02-26 22:50:36

标签: php arrays mysqli highcharts

DB表保存数字数据,每年12集(jan-dec)。 我需要一个包含每年所有数据的数组......

DB“web_table”的例子

2009 jan 10
2009 feb 66
...
2015 jan 99

我需要在Highchart系列中使用输出数组。每年一个阵列。

series: [{
    name: '2009',
    type: 'spline',
    data: [<?php echo $the_array_for_2009;?>] //outcome: data: [10,66,..,..]
},{
    name: '2010',
    ..etc..

今天我每年都在询问,这是非常不动的:

$str2009 = "SELECT * FROM web_table WHERE year = 2009";
... (etc)
$str2015 = "SELECT * FROM web_table WHERE year = 2015";


帮我一个foreach()并循环整个“系列设置”解决方案或任何其他建议?

2 个答案:

答案 0 :(得分:0)

这不是最优雅的代码,但应该让你到处都是,它的所有PHP都可以在纯SQL中做得更好。

<?php
// This be your mysql response
$data = [
    [2009, 'jan', 10],
    [2009, 'feb', 66],
    [2015, 'jan', 99],
];

$newdata = [];
foreach($data as $d) {
    $newdata[$d[0]][$d[1]] = $d[2];
}

$charts = [];
foreach($newdata as $year => $results) {
     $charts[] = "{ name: $year, type: 'spline', data: [ ". implode(',', $results) ." ] }";
}

echo 'Series: [' . implode(',', $charts) .'];';

示例输出:

  

系列:[{name:2009,type:'spline',data:[10,66]},{name:2015,type:'spline',data:[99]}];

答案 1 :(得分:0)

而不是:

$query = "SELECT * FROM web_table WHERE year = 2009";
你可以这样做:

$query = "SELECT year, GROUP_CONCAT(score SEPARATOR ',') AS data 
          FROM web_table 
          GROUP BY year";

在这里&#39;得分&#39;包含要放在数组&#39;数据&#39;。

下的数组中的列

一旦你有了这个,你就可以做到:

if ($result = $mysqli->query($query)) {
  foreach($result->fetch_all() as $row) {
    $series[] = array('year' => $row['year'],
                      'type' => 'spline',
                      'data' => $row['data']);
  } 
  $result->close();
}