想象每一行作爲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世界中太懶惰了。 –