当我将数组作为参数传递给图表时,它会停止在网络上显示 页。
<?php
$f = fopen("C:\wamp64\www\dashb\CSV\salespermonthdollars.csv", "r");
$labels = array();
$data = array();
$loopCounter = 0;
while (($line = fgetcsv($f)) !== false) {
if($loopCounter == 0){
// this if is to skip the first row or the columns
} else {
array_push($labels,$line[0]);
array_push($data,$line[1]);
}
$loopCounter = $loopCounter + 1;
}
fclose($f);
?>
所以上面我读了我从查询结果中保存的csv文件,并尝试将其绘制在图表上:
<canvas id="myChart2">
<script>
$array3 = [1,2,3,4,5,5,41];
$array4 = [1,2,3,4,5,5,41];
var ctx = document.getElementById('myChart2').getContext('2d');
var myBarChart = new Chart(ctx, {
type: 'bar',
data: {
labels: $array3, //when i change this to $labels doesn't work same for4
datasets: [{
label: 'label',
data: $array4,
backgroundColor: "rgba(100,255,51,0.4)"
}]
}
});
</script>
</canvas>
主要是我在图表上显示查询结果。我执行,保存到csv并阅读
从那里。
欢迎任何改进方法的建议,我觉得它可以比这更容易。
答案 0 :(得分:1)
这是因为$labels
不是Javascript,而是PHP变量。所以你需要做的是在代码的php部分解码它:
...
fclose($f);
$labels = json_decode($label);
在Javascript部分:
var labels = JSON.parse("<?php echo $labels; ?>");
作为改进建议的一部分,you should not declare global variables。那你在这里做什么:
$array3 = [1,2,3,4,5,5,41];
$array4 = [1,2,3,4,5,5,41];
应该是:
var array3 = [1,2,3,4,5,5,41];
var array4 = [1,2,3,4,5,5,41];
我从名字中删除了$
- 美元,因为it's common practice to declare jQuery wrapper variables而这些显然不是。另外,通过$
前缀到他们的名字,我只能猜测你想要做的是在你的<script>
中声明php变量然后直接使用它们,但是它是不可能的< / strong>,因为首先,你缺少<?php
部分,第二部分 - 它们只会通过声明它们而保存在内存中。