【问题标题】:Using json_encode for Google graph display使用 json_encode 进行谷歌图形显示
【发布时间】:2016-04-01 16:43:13
【问题描述】:

我正在尝试将数据从 PHP 数组导入到 JS 谷歌线图...一旦我知道如何echo 结果,我将能够完成它。结果应如下所示:

data.addRows([
        [new Date(2014, 0),  -.5,  5.7],
        [new Date(2014, 1),   .4,  8.7],
        [new Date(2014, 2),   .5,   12],
        [new Date(2014, 3),  2.9, 15.3],
        [new Date(2014, 4),  6.3, 18.6],
        [new Date(2014, 5),    9, 20.9],
        [new Date(2014, 6), 10.6, 19.8],
        [new Date(2014, 7), 10.3, 16.6],
        [new Date(2014, 8),  7.4, 13.3],
        [new Date(2014, 9),  4.4,  9.9],
        [new Date(2014, 10), 1.1,  6.6],
        [new Date(2014, 11), -.2,  4.5]
      ]);

我目前正在使用JSON_ENCODE 来处理这样的数组:

$data = array("[new Date(2014, 0),  -.5,  5.7],', '[new Date(2014, 1),   .4,  8.7],");
    json_encode($data);

我最终将能够使用它从我的数据库中提取数据,并且我正在尝试像这样回应结果:

 data.addRows([
        <?
         echo str_replace('"', '', json_encode($data));
        ?>
    ]);

问题是,什么都不起作用?有人知道我在这里做错了什么吗?

【问题讨论】:

  • 为什么要删除所有引号,这使它无效的javascript
  • 另外,你到底为什么要回显来自 PHP 的函数调用,只需获取服务器上的时间戳
  • 你不能在 JSON 中使用 Date 对象(除非它们首先在 PHP 中初始化并序列化为字符串),事实上,你只能在 JSON 中使用普通对象。
  • 我真的搞砸了,不是吗,哈哈,这些是我在寻找答案时遇到的代码sn-ps,我很少使用这种编码所以不知道如何交叉带 JS 的 PHP

标签: javascript php arrays json echo


【解决方案1】:

您应该输出时间戳,可能以毫秒为单位,因为这是 Javascript 支持的

<?php
    $data = array(
        array(
            mktime(0, 0, 0, 1, 1, 2014) * 1000,
            -0.5,  
            5.7
        ),
        array(
            mktime(0, 0, 0, 2, 1, 2014) * 1000,
            0.4,  
            8.7
        )
    );
?>

现在你可以直接回显它,它会神奇地变成一个由数组组成的 javascript 数组

data.addRows(<? echo json_encode($data); ?>);

大多数插件都会接受时间戳,如果出于某种原因您必须拥有日期对象,您可以这样做

var result = <? echo json_encode($data); ?>;

result.forEach(function(arr) {
    arr[0] = new Date(arr[0]);
});

data.addRows(result);

【讨论】:

    【解决方案2】:

    首先,在您当前的代码中,JSON_ENCODE 绝对没有任何用处,只是在整个字符串中添加了额外的括号。其次,字符串中间的 ' 符号会发生一些奇怪的事情。另外,我不明白你为什么要把那个句子放在一个数组中。 现在,假设你打错了,数组看起来像:

    $data = array("[new Date(2014, 0),  -.5,  5.7]", "[new Date(2014, 1),   .4,  8.7]");
    

    如果你简单地循环它会更容易

    foreach($data as $value){
        echo $value.",";
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多