Представьте каждую строку как ось X, а каждый столбец - как серию (линию на графике):
---------------------------------
year | apple_price | banana_price
---------------------------------
2010 2.5 1.7
2011 2.6 2.0
array // MySQL results set
0 =>
array
'year' => 2010
'apple_price' => 2.5
'banana_price' => 1.7
1 =>
array
'year' => 2011
'apple_price' => 2.6
'banana_price' => 2.0
Мне нужно преобразовать массив mysql во что-то более подходящее для моих API диаграмм и JSON. Как бы вы это реализовали? Можно было бы транспонировать набор результатов? РЕДАКТИРОВАТЬ : это, конечно, должно быть динамическим: первый столбец - ось X, остатки будут сериями (линиями на диаграмме) :
array // indexed
0 =>
array // associative
'name' => 'apple_price'
'data' => [[2010, 2.5], [2011, 2.6]] // indexed array of array
1 =>
array // associative
'name' => 'banana_price'
'data' => [[2010, 1.7], [2011, 2.0]] // indexed array of array
РЕДАКТИРОВАТЬ : первое быстрое и грязное рабочее решение, пытающееся получить лучшее:
public static function mysqlResultSetToChartSeries($data)
{
// Return empty array if 0 rows or columns < 2
if (!isset($data[0]) || !count($data[0]) > 1) return array();
// Get all keys (columns names)
$keys = array_keys($data[0]);
// Temp array for storing col names and values
$tmp = array();
foreach($keys as $k) $tmp[$k] = array_map(function($r) use ($k){
return $r[$k];
}, $data);
// X axis
$x = array_shift($tmp);
$series = array_map(function($k, $v) use ($x) {
return array(
'name' => $k,
'data' => array_map(function($xaxis, $yaxis) use ($x) {
return array($xaxis, $yaxis);
}, array_values($x), $v)
);
}, array_keys($tmp), array_values($tmp));
return $series;
}