javascript - 如何使用 PHP foreach 生成用作插件变量的 javascript 对象数组?
问题描述
在过去的几个小时里,我浏览了 Stackoverflow,没有一个类似的问题能回答我正在寻找的问题。有一个,但是选择的答案是我没有尝试过的。
我需要从数据库动态创建一个 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 社区!
解决方案
由于您的最终结构不应该是索引数组,而应该是关联的(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)
);
推荐阅读
- python - AttributeError: 'dict' object has no attribute 'step'
- javascript - React.js 令牌头授权
- python - 根据两个列表获取多个可能性列表
- python - 使用 camelot 的 PDF 文件名和坐标并获取表格详细信息
- json - 打印所有满足条件的元素 JSON
- kubernetes - 如何使用静态spring cloud stream url来启动spring cloud任务?
- kubernetes - 多容器 pod 与多 pod 之间的区别
- nagios - NRPE:远程不支持版本 3 数据包
- c# - 找不到 BaseCommandModule 类,与正在使用的正确命名空间相反
- excel - 添加个性化右键单击选项后更改工作表