javascript - 如何使用 PHP 获得与我需要的完全相同的 JSON 格式?
问题描述
我需要这种 JSON 格式:
{
"1" : [{"start": "", "end": ""}],
"2" : [{"start": "", "end": ""}],
"3" : [{"start": "", "end": ""}],
"4" : [{"start": "", "end": ""}],
"5" : [{"start": "", "end": ""}],
"6" : [{"start": "", "end": ""}],
"7" : [{"start": "", "end": ""}]
}
但是使用 PHP 我得到了这种格式:
[
{"1" : [{"start": "", "end": ""}]},
{"2" : [{"start": "", "end": ""}]},
{"3" : [{"start": "", "end": ""}]},
{"4" : [{"start": "", "end": ""}]},
{"5" : [{"start": "", "end": ""}]},
{"6" : [{"start": "", "end": ""}]},
{"7" : [{"start": "", "end": ""}]},
]
索引 "1","2".... 对应于一周中的某一天。每个索引都有“n”个小时范围(数组),格式为 {start: "", end: ""},...
例如:{start:"12:00:00",end:"14:00:00"},{start:"14:00:00","15:00:00"},...
我使用 PHP 函数从表中获取日期,然后使用“foreach”进行迭代,以在每次迭代中从同一个表中获取小时范围,然后迭代这些范围以创建所需的格式。
最后一步是使用“json_encode”进行格式化。
//Getting all days data from DB given user ID
$aDays = Schedule::getDays($nIdUser);
//Array to Store Data
$aJson = [];
//Iteration
foreach ($aDays as $aInfoDay) {
//Getting single day hour range given day ID
$aRangesHours = Schedule::getDayRanges("id_day = {$aInfoDay['id_day']} AND id_user = {$nIdUser}");
$aParsedDay = [];
//Iterate Ranges
foreach ($aRangesHours as $aRangeHour) {
$aParsedDay[$aRangeHour['id_day']][] = array('start' => $aRangeHour['startHour'],'end' => $aRangeHour['endHour']);
}
//Store Data in aJson Array
$aJson[] = $aParsedDay;
}
解决方案
感谢您的编辑建议。在对 JSON 格式进行了一些挖掘之后,我发现我需要创建数组对象而不是数组:
//Getting all days data from DB given user ID
$aDays = Schedule::getDays($nIdUser);
//Object Array to Store Data
$oJson = (object)array();
//Iteration
foreach ($aDays as $aInfoDay) {
//Getting single day hour ranges given day ID
$aRangesHours = Schedule::getDayRanges("id_day = {$aInfoDay['id_day']} AND id_user = {$nIdUser}");
//Array to Store all Hour Ranges in a Day
$aParsedDay = array();
//Iterate Ranges
foreach ($aRangesHours as $aRangeHour) {
//Object Array to Store Single Hour Range
$oRange = (object)array();
$oRange->start = $aRangeHour['startHour'];
$oRange->end = $aRangeHour['endHour'];
//Pushing Range object to $aParsedDay Array, this is for keeping the [{"start":"","end":""},...}] format
array_push($aParsedDay,$oRange);
//Saving $aParsedDay in $oJson Object, the name of the index will be the current 'id_day'
$oJson->{$aRangeHour['id_day']} = $aParsedDay;
}
}
//result
echo json_encode($oJson);
获得所需的格式:
{
"1" : [{"start": "12:00:00", "end": "13:00:00"}],
"2" : [{"start": "09:00:00", "end": "10:00:00"},{"start": "10:00:00", "end": "12:00:00"}],
"3" : [{"start": "15:00:00", "end": "16:00:00"},{"start": "16:00:00", "end": "17:00:00"}]
}
推荐阅读
- vue.js - 在 Vue.js 中,为什么我的按钮没有被适当地禁用?
- postman - Postman 将图像数据发布到strapi
- php - 将带有参数的路由重定向到带有这些参数的另一个路由(Laravel)
- hyperledger-fabric - 对等组织中组织单元标识符的实现导致排序者恐慌并退出
- c++ - 如何获取 GLFW 窗口 ID?
- winforms - Winform 图表控件中的自定义 X 轴标签格式
- angular - 错误类型错误:无法在 HomeComponent.push../src/app/home/home.component.ts.HomeComponent.addEmployee 处读取 null 的属性“推送”
- javascript - “API”一词在“Fetch API”和“REST API”这两个短语中有何不同?
- html - 如何在下拉列表中列出父类别?
- javascript - Json数据计算并转为html