2阵列之间比较日期值 [英] comparing date value between two array

查看:123
本文介绍了2阵列之间比较日期值的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

所以,我有两个数组中的一些日期:

so, I have some dates in two arrays:

$old_1 = array(
    array(
                'start_date' => '2014-09-06',
                'end_date' => ' 2014-09-07'
            ),
            array(
                'start_date' => '2014-09-26',
                'end_date' => '2014-09-28'
            ),
            array(
                'start_date' => '2014-09-29',
                'end_date' => '2014-10-02'
            ),
            array(
                'start_date' => '2014-10-03',
                'end_date' => ' 2014-10-04'
            ),
            array(
                'start_date' => '2014-10-06',
                'end_date' => ' 2014-10-23'
            ),
        array(
                'start_date' => '2014-11-19',
                'end_date' => '2014-11-23'
            ),
            array(
                'start_date' => '2014-11-25',
                'end_date' => ' 2014-11-28'
            )
);

$new_1 = array(
    array(
                'start_date' => '2014-10-03',
                'end_date' => ' 2014-10-04'
            ),
            array(
                'start_date' => '2014-10-10',
                'end_date' => ' 2014-10-12'
            ),
            array(
                'start_date' => '2014-10-17',
                'end_date' => '2014-10-19'
            ),
            array(
                'start_date' => '2014-11-19',
                'end_date' => ' 2014-11-23'
            ),
            array(
                'start_date' => '2014-11-25',
                'end_date' => '2014-11-28'
            )
);

我是比较数组$ old_1和阵列$ new_1,寻找日期是不是在数组$ old_1。如我所期待的结果是:

I was comparing array $old_1 and array $new_1, looking for the dates are not in array $old_1. The result as I was expecting:

$expected_1 = array(
    array(
            array(
                'start_date' => '2014-10-10',
                'end_date' => ' 2014-10-12'
            ),
            array(
                'start_date' => '2014-10-17',
                'end_date' => '2014-10-19'
            )
);

我用这个功能来做到这一点:

I use this function to do it:

function checkDate($redDate, $date_range)
    {
        $start_object = DateTime::createFromFormat('Y-m-d', $redDate['start_date']);
        $end_object = DateTime::createFromFormat('Y-m-d', $redDate['end_date']);

        if (is_array($date_range)) {
            foreach ($date_range as $key => $row) {
                $range_start = DateTime::createFromFormat('Y-m-d', $row['start_date']);
                $range_end = DateTime::createFromFormat('Y-m-d', $row['end_date']);

                if ($start_object != $range_start && $end_object != $range_end) {
                    if ($start_object < $range_end && $end_object > $range_start) {
                        $date = $redDate;
                    }
                }
            }
        }

        return $date;
    }

$expected = array();
foreach ($new_1 as $dates) {
$value = checkDate($dates, $old_1);
if (!empty($value)) {
$expected[] = $value;
}
}

不过这功能不符合这两个数组工作:

but that's function does not work with these two arrays:

$old_2 = array(
    array(
                'start_date' => '2014-09-26',
                'end_date' => '2014-09-28'
            ),
            array(
                'start_date' => '2014-10-03',
                'end_date' => ' 2014-10-04'
            )
);
$new_2 = array(
    array(
                'start_date' => '2014-09-26',
                'end_date' => '2014-09-28'
            ),
            array(
                'start_date' => '2014-10-03',
                'end_date' => ' 2014-10-04'
            ),
            array(
                'start_date' => '2014-10-17',
                'end_date' => '2014-10-20'
            ),
            array(
                'start_date' => '2014-10-29',
                'end_date' => ' 2015-01-02'
            )
);

我所期待的:

$expected_2 = array(
        array(
                array(
                    'start_date' => '2014-10-17',
                    'end_date' => '2014-10-20'
                ),
                array(
                    'start_date' => '2014-10-29',
                    'end_date' => ' 2015-01-02'
                )
    );

但我得到空数组来代替:

but I got empty array instead:

$result_2 = array(
    );

我做错过的比较功能的东西吗?
我需要你的提醒球员,感谢:)

do I miss something in comparation function? I need your advise guys, thanks :)

推荐答案

试试这个了checkdate 功能:

function checkDate($redDate, $date_range)
    {
        $start_object = DateTime::createFromFormat('Y-m-d', $redDate['start_date']);
        $end_object = DateTime::createFromFormat('Y-m-d', $redDate['end_date']);

        if (is_array($date_range)) {
            foreach ($date_range as $key => $row) {
                $range_start = DateTime::createFromFormat('Y-m-d', $row['start_date']);
                $range_end = DateTime::createFromFormat('Y-m-d', $row['end_date']);

                // if the date was found return a null object
                if ($start_object == $range_start && $end_object == $range_end) {
                    return null;
                }
            }
        }

        // the date was not found so return the date
        return $redDate;
    }

这篇关于2阵列之间比较日期值的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆