想象每一行作为X轴和每列作为一系列(在图表中的线):来自mysql的PHP结果集设置为图表系列?
---------------------------------
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。你将如何实现这一点?将可能转置结果集? EDIT:这当然应该是动态的:第一列是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
EDIT:第一快速和肮脏的工作溶液,试图获得一个更好的:
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;
}
确实是这样的格式,您希望它?如果是这样,那根本就不会那么难。我只是想确定那就是你想要的。 –
@LeviMorrison是的,是的。我知道,它应该很容易,但在编写丑陋的嵌套循环之前,我正在寻找一些默认函数来转置结果集。感谢您的帮助。 – gremo
我不确定这是否是您想要存储数据的方式,但不会有预定义的函数(不是我发现的)。我建议你为此使用正式的PHP类。我们在PHP世界中太懒惰了。 –