您好我已经广泛搜索过这个并且已经在很多方面进行了调整,但我无法做到这一点。
我的目标是从反馈表单中检索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,依此类推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"]
]
}
}
);
});
有没有人碰到这样的事情?我是以错误的方式接近它吗?任何帮助将不胜感激。
我也研究了很多以尽量不发帖,如果已经回答,请原谅我。
答案 0 :(得分: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)']);
}
答案 1 :(得分:1)
你的问题不是你想象的那样; json_encode()
尝试通过保留原始PHP数据类型来做正确的事情,并且来自MySQL数据库的数据是字符串。
想要号码吗?找到这个位:
$dataset1[] = array($rows['flavor'],$rows['COUNT(flavor)']);
并将其更改为:
$dataset1[] = array($rows['flavor'],(int)$rows['COUNT(flavor)']);
答案 2 :(得分: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