[英]How to get exactly the same JSON format that I need with PHP?
我需要以下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格式进行了一些挖掘之后,我发现需要创建Array Objects而不是Arrays:
//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"}]
}
尝试这个 :
let arr = [ {"1" : [{"start": "", "end": ""}]}, {"2" : [{"start": "", "end": ""}]}, {"3" : [{"start": "", "end": ""}]}, {"4" : [{"start": "", "end": ""}]}, {"5" : [{"start": "", "end": ""}]}, {"6" : [{"start": "", "end": ""}]}, {"7" : [{"start": "", "end": ""}]}, ]; let obj = {}; arr.map((item,index) => { obj[index + 1] = item[index + 1]; }); console.log(obj);
当您执行$aJson[] = $aParseDay;
,您正在考虑将$aJson
作为$aParseDay
对象的数组。 您需要做的是更改第二个foreach,以在$aJson
内部的id_day
密钥中指定start
和end
。
foreach ($aDays as $aInfoDay) {
$aRangesHours = Schedule::getDayRanges("id_day = {$aInfoDay['id_day']} AND id_user = {$nIdUser}");
$aParsedDay = [];
foreach ($aRangesHours as $aRangeHour) {
$aJson[$aRangeHour['id_day']][] = ['start' => $aRangeHour['startHour'],'end' => $aRangeHour['endHour']];
}
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.