【问题标题】:Converting Returned PHP Data into JavaScript Object将返回的 PHP 数据转换为 JavaScript 对象
【发布时间】:2016-10-18 16:14:04
【问题描述】:

我有一个数据集,它需要与 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 中的内容(示例数据,但填充方法相同):

$data = array();

$data['datasets'][1]['label']           = "First Data Set";
$data['datasets'][1]['borderColor']     = "rgba(30, 87, 153, .9)";
$data['datasets'][1]['backgroundColor'] = "rgba(30, 87, 153, .5)";

$data['datasets'][2]['label']           = "Afternoon";
$data['datasets'][2]['borderColor']     = "rgba(41, 137, 216, .9)";
$data['datasets'][2]['backgroundColor'] = "rgba(41, 137, 216, .5)";

// Loop through some foreachs and fill the $data
// Not the actual loop I use but same principle

foreach ($theData as $data)
{
    $data['datasets'][1]['data'][] = data;
}

foreach ($otherData as $data)
{
    $data['datasets'][2]['data'][] = data;
}

当我执行 console.log(JSON.stringify(theData)) 时,这会使用 json_encode(); 返回给 JavaScript,我得到了这个:

{
    "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 以使其更像最顶部的示例吗?

【问题讨论】:

  • 你为什么不在你的 PHP 中使用 json_encode($data)
  • @KickingLettuce 如果您以正常方式创建数组会有所帮助。 $data['datasets'] = array(); $data['datasets'][] = array('label' => 'First Data Set', ...
  • 请做。这是确保接收到的数据采用正确的 JSON 格式的唯一方法。
  • @Rishabh 对不起,我看错了一些东西。我正在使用它。很抱歉在那个上来回走动。
  • @Machavity 的答案是正确的

标签: javascript php json chart.js2


【解决方案1】:

让我们从头开始

  • theDataobject
  • datasetsarrayobjects
  • labelsarray

让我们开始构建这个

$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_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"
  ]
}

【讨论】:

  • 是的,它的工作,我没有看到这样的数组,感谢您的澄清
  • 这看起来是个不错的方法,让我测试一下。谢谢。
  • 我不明白为什么如果我将我的键设置为` $data['datasets'][1], instead of $data['datasets'][] 而不是它从对象数组更改到对象的对象(至少基于JSON.stringify(theData) 打印出来的方式。)
  • @KickingLettuce 这是因为 JSON 必须如何工作。假设您设置了密钥1,但没有设置密钥0json_encode 将通过将 1 键转换为 JSON 对象来保留它。请记住,JS 没有像 PHP 这样的实际关联数组
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-03-05
  • 2015-12-10
  • 1970-01-01
  • 2019-03-15
  • 2022-06-24
  • 2018-03-18
相关资源
最近更新 更多