Как использовать PHP foreach для генерации массива объектов JavaScript для использования в качестве переменной плагина? - PullRequest
0 голосов
/ 10 октября 2019

Я просматривал Stackoverflow в течение последних нескольких часов, ни один из вопросов, которые не являются похожими, отвечает на вопрос, который я ищу. Был один, однако выбранный ответ был тем, что я уже не пробовал.

Javascript с PHP Foreach

Мне нужно динамически создать массив переменных JavaScript избаза данных. У меня нет проблем с созданием массивов JSON, которые полезны в других областях моего сайта, однако формат, необходимый для плагина respiveCalendar, требует уникального формата, который я не могу имитировать.

Мой код выводит этот тип ответа

$(".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, но это сломало его, поэтому я не уверен, какое здесь используется синтаксическое правило. не заключайте в квадратные скобки и обратите внимание, что первая часть каждого события стоит отдельно без какого-либо идентификатора, такого как номер, URL, статус и т. д. Это просто поле даты. Насколько я понимаю, поле даты служит, как мне кажется, значением индекса подмассива.

Заранее спасибо, очень ценю сообщество StackOverflow!

1 Ответ

0 голосов
/ 11 октября 2019

Поскольку ваша конечная структура не должна быть индексированным массивом, а должна быть ассоциативной (объект в 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)
);
...