Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/289.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
phplot的MySQL到PHP数组_Php_Mysql_Phplot - Fatal编程技术网

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]