用于PHPlot的MySQL到PHP数组

时间:2016-05-23 23:36:01

标签: php mysql phplot

我有以下查询。

SELECT day, price, source FROM prices WHERE item_id = 5

表格如下

date | price | source
1    | 1     | source_1
2    | 2     | source_2
3    | 9     | source_1
3    | 7     | source_2
3    | 3     | source_3

请注意,并非每个来源都有每个"日期"的数据。有些日期有多个来源。这是由PHPlot提供的价格比较图。

PHPlot的数组必须是这样的。

$data = array(
 array('1', 1, 4, 2),
 array('2', 5, 7, 1),
 array('3', 7, '', 6),
 array('4', 8, 1, 4),
 array('5', 2, 4, 6),
 array('6', '', 4, 5),
 array('7', 7, 2, 3));

请注意,某些来源缺少某些数据。这是有目的的。

所以我需要做的(我认为)是以某种方式对数据进行分组。

最后的锦上添花是数据标签......

$labels = array('source_1', 'source_2', 'source_3');

我很惭愧地承认这已经过去了很多,但我很想学习。我只使用了一个"来源"。

1 个答案:

答案 0 :(得分:1)

确定..要创建数据数组,请尝试以下查询:

Draw

然后从该结果中获取关联数组,并将其传递给此函数:

SELECT `day`, `price`, `source` FROM prices WHERE `item_id` = 5 ORDER BY `day`, `source`

使用示例数据,这是function makeArray($rows) { $rowCount = 0; $finalArray = array(); $legendArray = array(); foreach($rows as $row) { $thisDate = (int)$row['day']; if ($thisDate > $rowCount) { $rowCount++; $finalArray[$rowCount-1] = array($thisDate, '', '', ''); } if (!in_array($row['source'], $legendArray)) { $legendArray[] = $row['source']; } $thisIndex = 1; switch($row['source']) { case 'source_1': $thisIndex = 1; break; case 'source_2': $thisIndex = 2; break; case 'source_3': $thisIndex = 3; break; } $finalArray[$rowCount-1][$thisIndex] = $row['price']; } return array($legendArray, $finalArray); } 返回数组时的输出:

print_r()