从日期范围列表中获取开始日期和结束日期

时间:2018-01-23 11:27:49

标签: php arrays sorting

我有一个对象数组,其日期范围来自两个字段。

array(2) {
  [0]=>
  array(12) {
    ["id"]=>
    string(2) "19"
    ["date_start"]=>
    string(19) "2018-01-15 00:00:00"
    ["date_end"]=>
    string(19) "2018-01-16 00:00:00"
    ["promo_name"]=>
    string(19) "Promo 1"

  }
  [1]=>
  array(12) {
    ["id"]=>
    string(2) "18"
    ["date_start"]=>
    string(19) "2018-01-16 00:00:00"
    ["date_end"]=>
    string(19) "2018-01-19 00:00:00"
    ["promo_name"]=>
    string(34) "Promo 2"

  }
}

我想从数组列表中找到第一个date_start和last_end。从这两个值开始,我想使用DatePeroid,这样我就可以在这两个值之间获得另一个日期列表。

    function sortFunction( $a, $b ) {
        return strtotime($a["date_start"]) - strtotime($b["date_start"]);
    }
    usort($query, "sortFunction");

我现在已经通过date_start对它们进行了排序,但是没有完成逻辑以获得最后的结束日期。

不确定如何以最佳方式进行。

1 个答案:

答案 0 :(得分:0)

使用数组缩减的示例:

$result = array_reduce($query, function ($a, $i) {
    if (strtotime($i['date_start']) < strtotime($a['date_start'])) {
        $a['date_start'] = $i['date_start'];
    }

    if (strtotime($i['date_end']) > strtotime($a['date_end'])) {
        $a['date_end'] = $i['date_end'];
    }

    return $a;
}, $query[0]);

echo $result['date_start'], ' - ', $result['date_end'];