在php数组中查找缺少的日期
我有一个php数组,如下所示:在php数组中查找缺少的日期,php,arrays,cakephp,Php,Arrays,Cakephp,我有一个php数组,如下所示: Array ( [0] => Array ( [EmployeeAttendance] => Array ( [attendance_id] => 1 [arrival_datetime] => 2016-11-01 03:31:00 [sta
Array
(
[0] => Array
(
[EmployeeAttendance] => Array
(
[attendance_id] => 1
[arrival_datetime] => 2016-11-01 03:31:00
[status] => Present
)
)
[1] => Array
(
[EmployeeAttendance] => Array
(
[attendance_id] => 2
[arrival_datetime] => 2016-11-03 06:31:00
[status] => Present
)
)
[2] => Array
(
[EmployeeAttendance] => Array
(
[attendance_id] => 3
[arrival_datetime] => 2016-11-06 07:31:00
[status] => Present
)
)
[3] => Array
(
[EmployeeAttendance] => Array
(
[attendance_id] => 4
[arrival_datetime] => 2016-11-08 19:31:00
[status] => Present
)
)
[4] => Array
(
[EmployeeAttendance] => Array
(
[attendance_id] =>5
[arrival_datetime] => 2016-11-10 08:00:00
[status] => Present
)
)
)
在这个数组中,我们可以看到从日期“2016-11-01”到“2016-11-10”的考勤详细信息,这里缺少一些日期,如“2016-11-02”、“2016-11-04”、“2016-11-05”、“2016-11-07”和“2016-11-09”。
现在,我想检查从“2016-11-01”到“2016-11-10”之间的日期的缺失日期,并使用status=“缺席”将这些缺失日期插入数组中。请给出一些建议。首先收集所有日期,排序,生成首个日期之间的日期范围,最后是缺少插入
$data = [
[
'EmployeeAttendance' => [
'attendance_id'=>1
,'arrival_datetime'=>'2016-11-01 03:31:00'
,'status'=>'Present'
]
]
,[
'EmployeeAttendance' => [
'attendance_id'=>1
,'arrival_datetime'=>'2016-11-05 03:31:00'
,'status'=>'Present'
]
]
,[
'EmployeeAttendance' => [
'attendance_id'=>1
,'arrival_datetime'=>'2016-11-11 03:31:00'
,'status'=>'Present'
]
]
];
$dates = [];
foreach ($data as $x => $d) {
$dates[] = substr($d['EmployeeAttendance']['arrival_datetime'],0,10);
}
sort($dates);
$period = new DatePeriod(
new DateTime($dates[0]),
new DateInterval('P1D'),
new DateTime(end($dates))
);
foreach ($period as $d) {
$key = $d->format('Y-m-d');
if (!in_array($key,$dates)) {
$data[] = [
'EmployeeAttendance' => [
'arrival_datetime'=>$key
,'status'=>'absent'
]
];
}
}
print_r($data);
您也可以尝试以下方法:
$a = array(array('EmployeeAttendance'=>array('attendance_id'=>1,'arrival_datetime'=>'2016-11-01 03:31:00','status'=>'Present')),array('EmployeeAttendance'=>array('attendance_id'=>2,'arrival_datetime'=>'2016-11-03 04:31:00','status'=>'Present')),array('EmployeeAttendance'=>array('attendance_id'=>3,'arrival_datetime'=>'2016-11-07 07:31:00','status'=>'Present')),array('EmployeeAttendance'=>array('attendance_id'=>4,'arrival_datetime'=>'2016-11-09 05:31:00','status'=>'Present')));
foreach($a as $key=>$data){
$presentDates[] = date("j", strtotime($data['EmployeeAttendance']['arrival_datetime']));// will give array of present dates array(1,3,7,9);
}
$first = reset($presentDates);
$last = end($presentDates);
$total = range($first,$last); // will give all dates between start and end
$absentArr = array_diff($total, $presentDates); // will give missing dates array(2,4,5,6,8)
foreach($absentArr as $value){
$a[]['EmployeeAttendance'] = array('arrival_datetime'=>'2016-11-'.$value,'status'=>'Absent');
}
print_r($a);
此数组是否仅限于一个月或任何一个月?@d.coder仅限于特定的一个月我们可以更改上述数组的结构吗?那么这个数组对您有什么用呢?是否可以按升序插入缺少的日期?只需在填充后排序
uasort($data,function($a,$b){返回$a['employeeAttenting']['arrival\u datetime']>$b['employeeAttenting']['arrival\u datetime'];})代码>,我是这样做的:foreach($dataas$key=>$d){$sort[$key]=strottime($d['EmployeeAttention']['arrival\u datetime']);}array\u multisort($sort,sort\u ASC,$data)@AjayKrishnaDutta,你可以考虑接受answer@AjayKrishnaDutta很抱歉打扰你,但你的问题包括这一个都没有接受答案,