Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/234.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在php数组中查找缺少的日期_Php_Arrays_Cakephp - Fatal编程技术网

在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

我有一个php数组,如下所示:

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很抱歉打扰你,但你的问题包括这一个都没有接受答案,