php - 如何使用 PHP while 语句构建多维 json 数组?
问题描述
正如您在下面的代码中看到的,2020-01-13 上有两个约会,但它们是作为单独的数组生成的。既然它们在同一天,我怎么能把它们放在同一个阵列上?我正在使用 mysqli 从数据库中获取所有信息,但为了这段代码,我只打印必要的信息。它有效,但我需要知道如何在同一数组中收集具有相同日期的约会。
php
//declare variable
$result = array();
//iterate
while($schedule = $result_data->fetch_assoc()){
//start time conversion into american time
// 24-hour time to 12-hour time
$start_time =date("g:i a", strtotime($schedule['start_time']));
//end time conversion into american time
$end_time =date("g:i a", strtotime($schedule['end_time']));
$my_schedule_start .= $start_time;
$my_schedule_end .= $end_time;
$schedule_date= $schedule['cleaning_date'];
$result[] = array(
"$schedule_date" => [
"number"=>'1',
"badgeClass"=>'',
"url"=>'url',
"dayEvents"=>[
"title"=>$schedule['first_name'].' '.$schedule['last_name'],
"status"=>$schedule['cleaning_status'],
"time"=>$start_time .' - '.$end_time
]
]
);
}
//send response back to jquery
header('Content-Type: application/json');
echo json_encode($result);
这个 php 打印这个
[{"2020-01-15":{
"number":"1",
"badgeClass":"",
"url":"url",
"dayEvents":{
"title":"Jen Doe",
"status":"Booked",
"time":"11:00 am - 12:00 pm"}
}
},
{"2020-01-13":{
"number":"1",
"badgeClass":"",
"url":"url",
"dayEvents":{
"title":"John Doe",
"status":"Booked",
"time":"2:00 pm - 5:00 pm"}
}
},
{"2020-01-13":{
"number":"1",
"badgeClass":"",
"url":"url",
"dayEvents":{
"title":"Alfred Doe",
"status":"Booked",
"time":"11:00 am - 12:00 pm"}
}
}
]
但我想要的结果是这样
[{
"2020-01-15": {
"number": "1",
"badgeClass": "",
"url": "url",
"dayEvents": {
"title": "Jen Doe",
"status": "Booked",
"time": "11:00 am - 12:00 pm"
}
}
},
{
"2020-01-13": {
"number": "2",
"badgeClass": "",
"url": "url",
"dayEvents": [{
"title": "John Doe",
"status": "Booked",
"time": "2:00 pm - 5:00 pm"
},
{
"title": "Alfred Doe",
"status": "Booked",
"time": "11:00 am - 12:00 pm"
}
]
}
}
]
解决方案
此代码在创建计划时创建由日期本身索引的每一天事件,然后当发现新事件时,它将检查该日期是否已设置。如果是这样,它将增加计数并添加新事件。唯一的复杂之处是它需要检查它是否只有 1 个现有条目 - 这需要首先转换为数组。要删除索引,首先json_encode()
使用array_values()
...
while($schedule = $result_data->fetch_assoc()){
//start time conversion into american time
// 24-hour time to 12-hour time
$start_time =date("g:i a", strtotime($schedule['start_time']));
//end time conversion into american time
$end_time =date("g:i a", strtotime($schedule['end_time']));
$my_schedule_start .= $start_time;
$my_schedule_end .= $end_time;
$schedule_date= $schedule['cleaning_date'];
if ( isset($result[$schedule_date])){
// Increment count
$result[$schedule_date][$schedule_date]["number"]++;
// Convert single item to array
if ( !isset($result[$schedule_date][$schedule_date]["dayEvents"][0])) {
$result[$schedule_date][$schedule_date]["dayEvents"] =
[$result[$schedule_date][$schedule_date]["dayEvents"]];
}
// Add in new event to dayEvents
$result[$schedule_date][$schedule_date]["dayEvents"][] = [
"title"=>$schedule['first_name'].' '.$schedule['last_name'],
"status"=>$schedule['cleaning_status'],
"time"=>$start_time .' - '.$end_time
];
}
else {
// Create new days schedule
$result[$schedule_date] = [
"$schedule_date" => [
"number"=>'1',
"badgeClass"=>'',
"url"=>'url',
"dayEvents"=>[
"title"=>$schedule['first_name'].' '.$schedule['last_name'],
"status"=>$schedule['cleaning_status'],
"time"=>$start_time .' - '.$end_time
]
]
];
}
}
header('Content-Type: application/json');
echo json_encode(array_values($result), JSON_PRETTY_PRINT);
推荐阅读
- python - 尝试运行烧瓶应用程序时出现错误“函数”对象没有属性“as_view”
- google-apps-script - 复制互连的(通过 IMPORTRANGE)电子表格并通过 Google Apps 脚本更改 IMPORTRANGE 公式
- html - 如何共享 Html 标签
- ruby-on-rails - 如何使用 ahoy 跟踪帖子的浏览量?
- c++ - 如何在对话框中托管预览处理程序
- oauth-2.0 - 当用户需要先登录以确定要请求的范围时,如何请求适当范围的访问令牌?
- python - Python如何获取每个集群中的最大数量
- c - 为什么printf继续读取并显示下一个整数变量的值时会得到这个值
- python - 如何从 plyer.notification 中删除“Python”一词?
- flutter - 如何在 Flutter 中初始化 StatefulWidget 的 State 中的字段?