php - 在 PHP 中生成所需的 JSON 格式
问题描述
我不熟悉 php 数组。因此我无法解决这个问题:
我的数据来自数据库。我没有发布数据库连接部分,它们工作得很好。据我了解,我需要使用多维数组。我的 Json 格式应该是这样的
{
"monthly":[
{
"id":1,
"name":"This is a JSON event",
"startdate":"2016-9-15",
"enddate":"2016-9-15",
"starttime":"12:00",
"endtime":"2:00",
"color":"#FFB128",
"url":""
},
{
"id":2,
"name":"This is a JSON event",
"startdate":"2019-3-25",
"enddate":"2019-3-25",
"starttime":"12:00",
"endtime":"23:00",
"color":"#EF44EF",
"url":""
}
]
}
我的 PHP 脚本(相关部分):
try {
$q = "SELECT * FROM eventcalendar";
$res = $db->prepare($q);
$res->execute();
if ($res->rowCount() != 0) {
$data = array('monthly' => array());
$push_array = array();
foreach ($res as $key) {
$data['monthly']['id'] = $key['id'];
$data['monthly']['name'] = $key['name'];
$data['monthly']['startdate'] = $key['startdate'];
$data['monthly']['enddate'] = $key['startdate'];
$data['monthly']['color'] = $key['color'];
$data['monthly']['starttime'] = 12;
$data['monthly']['endtime'] = 12;
$data['monthly']['url'] = "";
array_push($push_array, $data);
}
file_put_contents('../js/events.json', json_encode($push_array));
echo('<div class="alert alert-success resultsuccess" ><h4 class="alert-heading">Successful!</h4></div>');
}
} catch (Exception $e) {
echo('<div class="alert alert-danger resultsuccess" >'.'Error: '.$e->getMessage().'</div>');
}
我得到了 JSON 格式
[
{
"monthly":{
"id":"1",
"name":"test1",
"startdate":"2019-03-29",
"enddate":"2019-03-29",
"color":"#ffb128",
"starttime":12,
"endtime":12,
"url":""
}
},
{
"monthly":{
"id":"2",
"name":"test2",
"startdate":"2019-03-29",
"enddate":"2019-03-29",
"color":"#4263e6",
"starttime":12,
"endtime":12,
"url":""
}
}
]
谢谢阅读...
解决方案
monthly
您的问题是您在每次通过循环时创建带有索引的新数组,而不是将新数据推送到现有monthly
数组中。试试这个:
if ($res->rowCount() != 0) {
$push_array = array('monthly' => array());
$data = array();
foreach ($res as $key) {
$data['id'] = $key['id'];
$data['name'] = $key['name'];
$data['startdate'] = $key['startdate'];
$data['enddate'] = $key['startdate'];
$data['color'] = $key['color'];
$data['starttime'] = 12;
$data['endtime'] = 12;
$data['url'] = '';
array_push($push_array['monthly'], $data);
}
推荐阅读
- php - Woocommerce Checkout 页面显示双订单摘要?
- java - Hibernate/Postgres:重复键值违反唯一约束
- google-apps-script - 检查最高位并从网格单元格复制文本
- powershell - 同一脚本在 2 台不同机器上的不同行为
- firebase - Firebase 云消息传递为已取消订阅的令牌返回 200 OK
- verilog - 如何在冒号两侧使用 % 进行 Verilog 变量部分选择?
- semantic-ui - 模态全屏向左对齐
- r - 如何使用三个不同数据帧的变量执行 PCA 并对它们进行颜色区分?
- android - 基于应用状态的 Firebase 推送通知
- camera - 通过 gpio 引脚将相机连接到树莓派