MySQL 到 PHP 数组用于 phplot
MySQL to PHP arrays for phplot
我有以下查询。
SELECT day, price, source FROM prices WHERE item_id = 5
Table 看起来像这样
date | price | source
1 | 1 | source_1
2 | 2 | source_2
3 | 9 | source_1
3 | 7 | source_2
3 | 3 | source_3
请注意,并非每个来源都有每个 "date" 的数据。有些日期有多个来源。这是由 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');
我很惭愧地承认这让我有些头疼,但我很想学习。我只用一个 "source".
就可以完美地工作
好的..要制作数据数组,试试这个查询:
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()
返回数组时的输出:
Array
(
[0] => Array
(
Array
(
[0] => Array
(
[0] => 1
[1] => 1
[2] =>
[3] =>
)
[1] => Array
(
[0] => 2
[1] =>
[2] => 2
[3] =>
)
[2] => Array
(
[0] => 3
[1] => 9
[2] => 7
[3] => 3
)
)
)
[1] => Array
(
[0] => 'source_1'
[1] => 'source_2'
[2] => 'source_3'
)
)
我有以下查询。
SELECT day, price, source FROM prices WHERE item_id = 5
Table 看起来像这样
date | price | source
1 | 1 | source_1
2 | 2 | source_2
3 | 9 | source_1
3 | 7 | source_2
3 | 3 | source_3
请注意,并非每个来源都有每个 "date" 的数据。有些日期有多个来源。这是由 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');
我很惭愧地承认这让我有些头疼,但我很想学习。我只用一个 "source".
就可以完美地工作好的..要制作数据数组,试试这个查询:
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()
返回数组时的输出:
Array
(
[0] => Array
(
Array
(
[0] => Array
(
[0] => 1
[1] => 1
[2] =>
[3] =>
)
[1] => Array
(
[0] => 2
[1] =>
[2] => 2
[3] =>
)
[2] => Array
(
[0] => 3
[1] => 9
[2] => 7
[3] => 3
)
)
)
[1] => Array
(
[0] => 'source_1'
[1] => 'source_2'
[2] => 'source_3'
)
)