Php json_encode替换数字的特定字符串(对于flot.js)

Php json_encode替换数字的特定字符串(对于flot.js),php,javascript,jquery,mysql,flot,Php,Javascript,Jquery,Mysql,Flot,嗨,我已经广泛搜索了这个,并在许多方面进行了调整,但我就是不能得到它的权利 我的目标是从反馈表单中检索mysql数据并绘制flot.js图表。到目前为止,我可以通过以下方式检索数据: $query = "SELECT flavor, COUNT(flavor) FROM $tbl_name GROUP BY flavor"; $result = mysql_query($query); while($rows = mysql_fetch_array($result)) { $datase

嗨,我已经广泛搜索了这个,并在许多方面进行了调整,但我就是不能得到它的权利

我的目标是从反馈表单中检索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"]]
[["average",1],["bad",1],["excellent",1],["good",2]] 
flot.js需要我的x,y值是数字,所以我在调用$dataset1时通过使用JSON_numeric_CHECK将数值更改为整数,所以现在看起来如下所示:

[["average","1"],["bad","1"],["excellent","1"],["good","2"]]
[["average",1],["bad",1],["excellent",1],["good",2]] 
我不知道如何将单词excellent、good、average和bad转换为简单的数值,比如:单词excellent应该是1,good应该是2等等,所以我的flot数据输出如下:

[[3,1],[4,1],[1,1],[2,2]]
以下是我的flot 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"]
     ]
   }   
 }
);
})

有人碰到过这样的事情吗?我是不是走错路了?任何帮助都将不胜感激


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

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

想要数字吗?查找此位:

$dataset1[] = array($rows['flavor'],$rows['COUNT(flavor)']);
并将其更改为:

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

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

想要数字吗?查找此位:

$dataset1[] = array($rows['flavor'],$rows['COUNT(flavor)']);
并将其更改为:

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

在附加到数组之前替换该值

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)']);
}

在附加到数组之前替换该值

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)']);
}

我认为最好在javascript中对其进行分类,这样您就不会硬编码您的风格到在两个位置映射的整数:

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

我认为最好在javascript中对其进行分类,这样您就不会硬编码您的风格到在两个位置映射的整数:

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

非常感谢,但是我的COUNTflavor部分已经是一个整数了,因为在我的JSON编码位中使用了JSON\u NUMERIC\u CHECK。我实际上需要将优秀转化为1,优秀转化为2,平均转化为3,差转化为4。所以flot.js会将两个$rows都识别为数字。非常感谢,但是我的COUNTflavor部分已经是一个整数了,因为在我的JSON编码位中使用了JSON\u NUMERIC\u CHECK。我实际上需要将优秀转化为1,优秀转化为2,平均转化为3,差转化为4。所以flot.js会将两个$rows都识别为数字。您好,戈登,我很感谢您的帮助,但是flot.js仍然需要单词excellent、average、good和bad作为数字,而不是单词。我正试着用sprintf来表达我的想法,它可以用来给每个单词加上一个特定的数字吗?所以,把我弄糊涂了。。。你是说你真的需要你的JSON像这样。。。[[3,1]、[4,1]、[1,1]、[2,2]]?是的,我实际上是想用这些词来代替数字。抱歉搞混了,我正在读我的问题,我可以看出我是如何把所有的事情都搞混的。现在我正在尝试循环数组,以查找优秀的,并用1替换,依此类推。@Diego好的。。。让我们再试一次。看我的全部重写!:是的,我现在看到我的问题措辞错误,抱歉,已经很晚了,json_encode可能与我的问题无关,我应该在php或jqueryHi Gordon中循环。我感谢您的帮助,但flot.js仍然需要单词“优秀”、“平均”、“好”和“坏”作为数字而不是单词。我正试着用sprintf来表达我的想法,它可以用来给每个单词加上一个特定的数字吗?所以,把我弄糊涂了。。。你是说你真的需要你的JSON像这样。。。[[3,1]、[4,1]、[1,1]、[2,2]]?是的,我实际上是想用这些词来代替数字。抱歉搞混了,我正在读我的问题,我可以看出我是如何把所有的事情都搞混的。现在我正在尝试循环数组,以查找优秀的,并用1替换,依此类推。@Diego好的。。。让我们再试一次。看我的全部重写!:是的,我现在明白了,我的问题措辞错误,抱歉,已经很晚了,json_encode可能与我的问题无关,我应该在php或JQueryTank中循环,非常感谢Mark,我看到这一点时已经实现了php开关,但我相信它会对将来的参考有所帮助。非常感谢Mark,当我看到这一点时,我已经实现了php开关,但我相信它会对将来的参考有所帮助。