phplot的MySQL到PHP数组
我有以下疑问phplot的MySQL到PHP数组,php,mysql,phplot,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 请注意,并非每个源都有每个“日期”的数据。有些日期有多种来源。这
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');
我很惭愧地承认这让我有点不知所措,但我渴望学习。我只有一个“来源”就可以很好地完成这项工作。。要创建数据数组,请尝试以下查询:
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'
)
)
你能不能对PHPlot的期望做点解释?我知道您提供了一些示例数组,但是元素应该表示什么?@Alfie PHPlot需要两个数组。一个带数据,一个带标签。对于“数据”,您有X轴值,然后是与每个X轴值关联的Y轴值。为了简化,在我的示例中,我们有一个数组('1',1,4,2),它是天,源值,源值,源值。我自己几乎无法理解,因此,如果不清楚,我深表歉意。为了进一步混淆,一个X轴值(在我的例子中是一个日期)不需要有多个Y轴值,只要“缺失”值留空。下面是一个“官方”的例子,它可能有助于理解:ok。。您能否描述一下您希望图形的外观/显示内容?您希望源x在y轴上,日期在x轴上?价格在哪里合适?对不起,如果我很愚蠢:)那么x轴就是日期,对吗。y轴是价格(每个源一条线)。做得好,明天早上我将在实时数据上试用。令人印象深刻的工作,我将更新:)太好了-我不确定总的来源是否是固定的,因为这不会满足超过3个来源,因为它是。此外,“内部”数组从索引1开始:如果希望从0开始,请将$rowCount=0更改为$rowCount=-1。事实上,我将编辑它,因为从1开始是不典型的;我可能会在将来添加更多,但它看起来像是一个简单的更改来支持这一点。我唯一注意到的是零值,PHPlot将它们视为影响图形的实际零。如果可能,需要为空值。确定无问题-只需在数组初始化中更改。将再次更新:)@DanielCrocker由于所有源代码都以
source\uuu
开头,并以整数结尾,因此您只需获取该整数,而无需执行switch
语句。例如,您可以使用源代码
(将其用作创建数组的分隔符)进行分解,然后从该数组中获取第二个元素将给出数字。类似于“$number=explode”('source_u'),$row['source'])$编号=$number[1]代码>