2014-10-01 88 views
-2

我在数组中有一些日期范围,并且想合并它们。结果是具有最低开始日期和最高结束日期的日期范围。这些是不同情况下的一些样本。 壳体1:如何合并数组中的日期范围

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

//expected 
$res1 = array('start_date' => '2014-10-06', 'end_date' => '2014-10-23'); 

壳体2:

$case2 = array(
    array(
     'start_date' => '2014-10-06', 
     'end_date' => '2014-10-23', 
    ), 
    array(
     'start_date' => '2014-09-10', 
     'end_date' => '2014-10-12', 
    ), 
    array(
     'start_date' => '2014-10-17', 
     'end_date' => '2014-10-19', 
    ), 
); 

//expected 
$res2 = array('start_date' => '2014-09-10', 'end_date' => '2014-10-23'); 

壳体3:

$case3 = array(
    array(
     'start_date' => '2014-10-06', 
     'end_date' => '2014-10-23', 
    ), 
    array(
     'start_date' => '2014-10-10', 
     'end_date' => '2014-10-12', 
    ), 
    array(
     'start_date' => '2014-10-17', 
     'end_date' => '2014-11-12', 
    ), 
); 

//expected 
$res3 = array('start_date' => '2014-10-06', 'end_date' => '2014-11-12'); 

您的帮助是高度赞赏。感谢你们

+3

你试过了什么?堆栈溢出是为了帮助人们,而不是为他们做... – 2014-10-01 23:52:45

+0

其实它是这个问题的一部分'':http:// stackoverflow.com/questions/26076860 /比较日期值之间的二阵列',我被卡在它上面。谢谢btw。 – 2014-10-02 02:49:31

回答

0

既然你只是针对最低和最高的日期,只是把它们转换成秒,对它们进行排序,然后得到第一个和最后一个:

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

$all_dates = array(); 
array_walk_recursive($case1, function($date) use (&$all_dates){ $all_dates[] = strtotime($date); }); // put them all inside and convert them to seconds 
sort($all_dates); // normal sorting 
$res1 = array('start_date' => date('Y-m-d', reset($all_dates)), 'end_date' => date('Y-m-d', end($all_dates))); // then assign the first element = start, and end element = end date 
echo '<pre>'; 
print_r($res1); 
+0

美丽的代码,谢谢。 – 2014-10-02 02:47:30

+0

@FatimahWulandari im很高兴这有帮助 – Ghost 2014-10-02 03:01:02

0

您可以使用的内置PHP数组功能:

array_merge_recursivearray_replace_recursive

+0

正确答案是array_reduce。 – DefiniteIntegral 2014-10-02 00:27:16

+0

感谢您的建议,我会阅读手册。 – 2014-10-02 02:47:59