Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/289.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
将返回的PHP数据转换为JavaScript对象_Javascript_Php_Json_Chart.js2 - Fatal编程技术网

将返回的PHP数据转换为JavaScript对象

将返回的PHP数据转换为JavaScript对象,javascript,php,json,chart.js2,Javascript,Php,Json,Chart.js2,我有一个数据集,它需要与JavaScript变量的格式相同,如下所示: var theData = { datasets: [ { label: "My First dataset", backgroundColor: "rgba(179,181,198,0.2)", borderColor: "rgba(179,181,198,1)", data: [65, 59, 90,

我有一个数据集,它需要与JavaScript变量的格式相同,如下所示:

var theData = {
    datasets: [
        {
            label: "My First dataset",
            backgroundColor: "rgba(179,181,198,0.2)",
            borderColor: "rgba(179,181,198,1)",
            data: [65, 59, 90, 81, 56, 55, 40]
        },
        {
            label: "My Second dataset",
            backgroundColor: "rgba(255,99,132,0.2)",
            borderColor: "rgba(255,99,132,1)",
            data: [28, 48, 40, 19, 96, 27, 100]
        }
    ],
    labels: ["Eating", "Drinking", "Sleeping", "Designing", "Coding", "Cycling", "Running"]
};
数据是用PHP构建的,但我不能像那样得到它

以下是我在PHP中的内容(示例数据,但填充方法相同):

这将使用
json_encode()返回JavaScript当我执行
console.log(JSON.stringify(theData))
时,我得到以下信息:

{
    "datasets":{
        "1":{
            "label":"Morning",
            "borderColor":"rgba(125, 185, 232, .9)",
            "backgroundColor":"rgba(125, 185, 232, .5)",
            "borderWidth":1,
            "data":[
                "24",
                0,
                0,
                "30",
                "24",
                "36",
                "36"
            ]
        },
        "2":{
            "label":"Afternoon",
            "borderColor":"rgba(41, 137, 216, .9)",
            "backgroundColor":"rgba(41, 137, 216, .5)",
            "borderWidth":1,
            "data":[
                "24",
                0,
                0,
                "24",
                "24",
                "30",
                "36"
            ]
        }
    },
    "labels":[
        "Sun Aug 14",
        "Mon Aug 15",
        "Tue Aug 16",
        "Wed Aug 17",
        "Thu Aug 18",
        "Fri Aug 19",
        "Sat Aug 20"
    ]
}

这是针对Chart.js 2.3的。顶部的示例数据直接来自Chart.js示例数据。上面的JSON是我的结果。因为它们不相同,所以图表不起作用。我可以更改我的PHP,使其更像顶部的示例吗?

让我们从顶部开始

  • 数据
    是一个
    对象
  • 数据集
    对象的
    数组
  • 标签
    是一个
    数组
那么让我们开始建造这个

$data = array();
$data['datasets'] = array();
$data['datasets'][] = array("label" => "First Data Set",
     "borderColor" => "rgba(30, 87, 153, .9)",
     "backgroundColor" => "rgba(30, 87, 153, .5)"
     );
$data['datasets'][] = array("label" => "Second Data Set",
     "borderColor" => "rgba(41, 137, 216, .9)",
     "backgroundColor" => "rgba(41, 137, 216, .9)"
     );

$data['labels'] = array("Eating", "Drinking", "Sleeping", "Designing", "Coding", "Cycling", "Running");

echo json_encode($data);
如前所述,
json\u encode
完成了构建阵列后的所有工作

{
  "datasets": [
    {
      "label": "First Data Set",
      "borderColor": "rgba(30, 87, 153, .9)",
      "backgroundColor": "rgba(30, 87, 153, .5)"
    },
    {
      "label": "Second Data Set",
      "borderColor": "rgba(41, 137, 216, .9)",
      "backgroundColor": "rgba(41, 137, 216, .9)"
    }
  ],
  "labels": [
    "Eating",
    "Drinking",
    "Sleeping",
    "Designing",
    "Coding",
    "Cycling",
    "Running"
  ]
}

为什么在您的应用程序中不使用json_encode($data)PHP@KickingLettuce如果您以常规方式创建数组,则会有所帮助<代码>$data['dataset']=array()$数据['dataset'][]=数组('label'=>'First Data Set',…
请这样做。这是确保接收到的数据采用正确的JSON格式的唯一方法。@Rishabh抱歉,我误读了一些内容。我正在使用它。很抱歉在这个问题上来回重复。答案@Machavity是正确的。是的,它的工作,我没有看到数组中的数组,感谢您的澄清。这个外观就像一个很好的方法一样,让我测试一下。谢谢。我不明白为什么如果我将我的键设置为“$data['datasets'][1]
,而不是
$data['datasets'][],它会将它从一个对象数组更改为一个对象对象对象对象(至少基于
JSON.stringify(theData)
打印的方式)@这是因为JSON必须如何工作。假设您设置键
1
,但不设置键
0
JSON\u encode
将通过将其转换为JSON对象来保留该键。请记住,JS没有像PHP那样的实际关联数组
{
  "datasets": [
    {
      "label": "First Data Set",
      "borderColor": "rgba(30, 87, 153, .9)",
      "backgroundColor": "rgba(30, 87, 153, .5)"
    },
    {
      "label": "Second Data Set",
      "borderColor": "rgba(41, 137, 216, .9)",
      "backgroundColor": "rgba(41, 137, 216, .9)"
    }
  ],
  "labels": [
    "Eating",
    "Drinking",
    "Sleeping",
    "Designing",
    "Coding",
    "Cycling",
    "Running"
  ]
}