2

嗨,我已经对此进行了广泛的搜索,并在很多方面进行了调整,但我就是无法做到正确。

我的目标是从反馈表中检索 mysql 数据并绘制一个 flot.js 图表。到目前为止,我可以用这个检索数据:

$query = "SELECT flavor,  COUNT(flavor) FROM $tbl_name GROUP BY flavor";
$result = mysql_query($query);  

while($rows = mysql_fetch_array($result))
{
$dataset1[] = array($rows['flavor'],$rows['COUNT(flavor)']);
}

这会检索风味评级(优秀、好、平均或差)并计算每个在反馈中使用的次数,数组如下所示:

[["average","1"],["bad","1"],["excellent","1"],["good","2"]]

flot.js 需要我的 x,y 值是数字,所以当我调用 $dataset1 时,我设法使用 JSON_NUMERIC_CHECK 将数值更改为整数,所以现在它看起来像这样:

[["average",1],["bad",1],["excellent",1],["good",2]] 

我不知道如何将单词“优秀、好、平均和坏”转换为简单的数值,例如:单词“优秀”应该是 1,“好”应该是 2 等等,所以我的浮点数据输出像:

[[3,1],[4,1],[1,1],[2,2]]

这是我的浮动 javascript:

$(function () {

$.plot(
   $("#graph"),
   [
    {
      label: "Flavor",
      data: <?php echo json_encode($dataset1, JSON_NUMERIC_CHECK); ?>,
      bars: {
        show: true,
        barWidth: 0.5,
        align: "center"
      }   
    }
 ],
 {
   xaxis: {
     ticks: [
       [1, "excellent"],
       [2, "good"],
       [3, "average"],
       [4, "bad"]
     ]
   }   
 }
);

});

有没有人遇到过这样的事情?我以错误的方式接近它吗?任何帮助将不胜感激。

我也研究了很多,尽量不要重复发帖,如果已经回答,请原谅我。

4

3 回答 3

2

在追加到数组之前替换值...

while($rows = mysql_fetch_array($result))
{
    switch ($rows['flavor']) {
        case 'excellent':
            $number = 1;
            break;
        case 'good':
            $number = 2;
            break;
        case 'average':
            $number = 3;
            break;
        case 'bad':
            $number = 4;
    }
    $dataset1[] = array($number, $rows['COUNT(flavor)']);
}
于 2013-01-26T08:37:47.080 回答
1

你的问题不是你想的那样;json_encode()试图通过保留原始 PHP 数据类型来做正确的事情,而从 MySQL 数据库中出来的数据是字符串。

想要数字?找到这个位:

$dataset1[] = array($rows['flavor'],$rows['COUNT(flavor)']);

并将其更改为:

$dataset1[] = array($rows['flavor'],(int)$rows['COUNT(flavor)']);
于 2013-01-26T08:32:20.103 回答
1

我认为最好在 javascript 中对其进行排序,这样您就不会flavors to integers在两个位置对映射进行硬编码:

dataForFlot = [];
ticksForFlot = [];

flavorToIntMap = {'excellent':1, 'good':2, 'average':3, 'bad':4}; // this is our data to tick mapping
originalData = [["average",1],["bad",1],["excellent",1],["good",2]]; // from your PHP

$.each(originalData, function(){ dataForFlot.push([flavorToIntMap[this[0]],this[1]]);});// convert the data to how flot wants it
$.each(flavorToIntMap, function(k,v){ticksForFlot.push([v,k]);}); // convert our mapping to the how flot wants the ticks
于 2013-01-26T20:04:41.717 回答