在PHP变量中为Javascript Donut Chart引用PHP变量

时间:2016-05-15 08:46:07

标签: javascript php charts

我今天有点困难时间将一些PHP变量传递给Javascript for a Donut图表。我现在一直在搞乱这个问题并且还没有弄明白,我已经通过这里的帖子以及众多谷歌搜索进行了检查,但还没有找到答案。这就是我想要完成的事情:

我正在尝试将数据从MySQL推送到Javascript Donut图表,以便将Web引用转移到特定的PHP页面。 Javascript图表的语法如下:

<script>
Morris.Donut({
element: 'css div',
data: 
[
{ label: '<?php echo($graph["referrer"]); ?>', value: '<?php echo($graph["chart"]); ?>' },
] 
});
</script>

$ graph ['referrer']变量包含引荐者名称,例如“Google.com”,$ graph ['count']变量将引荐者名称的相应记录数保存为数字,例如“ 5" 。

以“{label”开头的Javascript行表示圆环图的一部分。最初从MySQL中提取的数据是通过fetchArray()完成的,我要做的是使用PHP foreach语句生成每个“{label”行(例如foreach($ Array as $ graph))以便图形可以根据fetchArray()返回的引用者名称的数量动态生成。我已经尝试了几乎所有我能想到的工作 - 将整个Javascript行存储在PHP中,然后将其回显到Javascript等。但它总是会导致PHP内部错误。

我确定答案就在我的鼻子底下,谢谢大家的时间。

4 个答案:

答案 0 :(得分:2)

使用json_encode()生成干净的数据对象:

PHP中的

$data = array( array( 'label' => $graph["referrer"] ), 'value' => $graph["chart"] ) );
在您的JavaScript中

;

data: <?php echo json_encode($data); ?>

答案 1 :(得分:1)

将php变量数组传递给js脚本的正确方法是使用json。以下是您需要做的事情:

php 部分:

$sql = 'select * from ....';    // your query
// execute query
// as I don't know what mysql api do you use, 
// it's kinda pseudo-code
// but the main idea is to get all rows 
// you need in one array `$graphs`

$graphs = array();
while ($graph = fetch_array()) {
    $graphs[] = array(
        'label' => $graph["referrer"],
        'value' => $graph["chart"],
    );
}

js 部分:

<script>
Morris.Donut({
    element: 'css div',
    data: <?php echo json_encode($graphs); ?>
});
</script>

答案 2 :(得分:1)

你根本没有循环$graph个变量。它只有一个:

<script>
  Morris.Donut({
    element: 'css div',
    data: [{
      label: '<?php echo($graph["referrer"]); ?>',
      value: '<?php echo($graph["chart"]); ?>'
    },]
  });
</script>

上面的代码只会渲染一个变量。我相信,你应该在这里有一些循环:

<script>
  Morris.Donut({
    element: 'css div',
    data: [
<?php foreach (/* some loop */) { ?>
      {
        label: '<?php echo($graph["referrer"]); ?>',
        value: '<?php echo($graph["chart"]); ?>'
      },
<?php } ?>
    ]
  });
</script>

或者最好的方法是使用数组和json_encode()输出JSON。

答案 3 :(得分:0)

我的最终解决方案是将字符串连接在一个大而丑陋但工作的全局中。

<script>
Morris.Donut({
element: 'graph div'
data: {
<?php foreach($multidimarray as $graph): ?>
    <?php echo htmlspecialchars("{label: "."'".$graph['referrer']."'".", value: "."'".$graph['count']."'"." }, "); ?>
<?php endforeach; ?>
]
});
</script>

返回:     {label:&#39; Facebook&#39;,价值:&#39; 2&#39; },     {标签:&#39;直接&#39;,价值:&#39; 2&#39; },     {label:&#39; Microsoft&#39;,value:&#39; 1&#39; },     {标签:&#39; Ask.com&#39;,价值:&#39; 1&#39; },     {label:&#39; Google&#39;,value:&#39; 1&#39; },

再次感谢大家的帮助,即使我不理解他们,我也很感谢你的所有答案。我将标记Gerald的答案,因为他首先回答,首先提到了json_encode,并让我最接近预期的结果。