繁体   English   中英

如何获得与PHP完全相同的JSON格式?

[英]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密钥中指定startend

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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM