首页 > 解决方案 > 如何使用 PHP foreach 生成用作插件变量的 javascript 对象数组?

问题描述

在过去的几个小时里,我浏览了 Stackoverflow,没有一个类似的问题能回答我正在寻找的问题。有一个,但是选择的答案是我没有尝试过的。

带有 PHP Foreach 的 Javascript

我需要从数据库动态创建一个 JavaScript 变量数组。我生成在我网站的其他区域有用的 JSON 数组没有问题,但是插件 responsiveCalendar 所需的格式需要我无法模仿的独特格式。

我的代码输出这种类型的响应

$(".responsive-calendar").responsiveCalendar({
      time: '<?php echo $today; ?>',
      events: {
       "2014-04-30": {"number": 1, "badgeClass": "badge-warning", "url": "http://w3widgets.com/responsive-calendar"},
       "2013-04-26": {"number": 1, "badgeClass": "badge-warning", "url": "http://w3widgets.com"}, 
       "2013-05-03": {"number": 1, "badgeClass": "badge-error"}, 
       "2013-06-12": {}}
     });

我正在使用的脚本如下

$sql = $conn->prepare('SELECT date,total,url,status FROM SQLTABLE ORDER BY date DESC');
$sql->execute();
$json = [];
$events = $sql->fetchAll(PDO::FETCH_ASSOC);
foreach ($events as $e) {
    $json[] = array(
        date("Y-m-d", strtotime($e[date])) => array(
        'number'=> $e[number],
        'url'=> $e[url],
        'status'=> ($e[status] == 1 ? true : false)
        ));
}
$events = json_encode($json, JSON_UNESCAPED_SLASHES);
echo $events;
$conn->close();

这是我得到的结果

[{
  "2017-09-05": {
    "number": 10,
    "url": "http",
    "active": true
  }
}, {
  "2017-09-05": {
    "number": 7,
    "url": "http",
    "active": false
  }
},
...
{
  "2017-09-05": {
    "number": 15,
    "url": "http",
    "active": false
  }
}, {
  "2017-09-05": {
    "number": 1,
    "url": "http",
    "active": false
  }
}]

我正在尝试完成此操作(如下),然后将其分配给名为 events 的插件中的对象变量。我确实尝试过使用方括号,例如如何制作一些 Ajax 数据传递,但这打破了它,所以不确定这里有什么语法规则。

{
  "2017-09-05": {
    "number": 10,
    "url": "http",
    "active": true
},
  "2017-09-05": {
    "number": 7,
    "url": "http",
    "active": false
  },
...
  "2017-09-05": {
    "number": 15,
    "url": "http",
    "active": false
  },
  "2017-09-05": {
    "number": 1,
    "url": "http",
    "active": false
  }
}

所以总结一下,我不需要方括号,并注意每个事件的第一部分是独立的,没有任何标识符,例如数字、url、状态等。它只是日期字段。在我的业余理解中,日期字段用作我相信子数组的索引值。

提前感谢您,非常感谢 StackOverflow 社区!

标签: javascriptphparraysforeachjavascript-objects

解决方案


由于您的最终结构不应该是索引数组,而应该是关联的(JS 中的对象),所以不要使用$json[] =, 但是$json[date] =.

所以替换:

$json[] = array(
    date("Y-m-d", strtotime($e[date])) => array(
    'number'=> $e[number],
    'url'=> $e[url],
    'status'=> ($e[status] == 1 ? true : false)
    ));

... 和:

$json[date("Y-m-d", strtotime($e[date]))] = array(
    'number'=> $e[number],
    'url'=> $e[url],
    'status'=> ($e[status] == 1 ? true : false)
);

推荐阅读