【问题标题】:How to use PHP foreach to generate javascript object array for use as plugin variable?如何使用 PHP foreach 生成用作插件变量的 javascript 对象数组?
【发布时间】:2019-10-10 20:46:40
【问题描述】:

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

Javascript with PHP Foreach

我需要从数据库中动态创建一个 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
  }
}]

我正在尝试完成这个(如下),然后将其分配给插件中称为事件的对象变量。我确实尝试过使用方括号,例如一些 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 社区!

【问题讨论】:

    标签: javascript php arrays foreach javascript-objects


    【解决方案1】:

    由于您的最终结构不应该是索引数组,而应该是关联的(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)
    );
    

    【讨论】:

    • 您好,我实现了建议的方法,它确实生成了我需要的正确格式,但它只列出了foreach的最后一条记录。
    • 更新:在重试时发现我的 SQL 代码存在问题,尽管由于某种原因它仍然只显示我知道还有更多的表的一些结果。但是,结果绝对是我​​要找的,我相信我可以从这里弄清楚。非常感谢。
    • 更新:记录未显示的问题与许多具有相同日期的记录有关,因此这无疑是对数组中分组如何工作的教育性理解。需要查看有关拆分相似日期的信息。
    猜你喜欢
    • 1970-01-01
    • 2012-02-02
    • 1970-01-01
    • 2018-11-26
    • 2011-09-23
    • 2019-09-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多