PHP按给定的日期范围修改数组

时间:2013-03-20 18:01:34

标签: php arrays date filter

我有一个用PHP编写的表单,包含以下数组和两个变量: startDate和endDate。

我想做的是显示用户定义日期范围内的唯一日期。

$startDate = "2013-03-08";
$endDate = "2013-03-12";

Array
(
    [0] => 2013-03-06|Lorem|Mom|01:45
    [1] => 2013-03-07|ipsum|Dad|01:00
    [2] => 2013-03-08|dolor|Dad|01:45
    [3] => 2013-03-09|sit|Dad|01:00
    [4] => 2013-03-10|amet|Mom|01:45
    [5] => 2013-03-11|Lorem|Mom|01:45
    [6] => 2013-03-12|ipsum|Mom|01:00
    [7] => 2013-03-13|dolor|Dad|01:45
    [8] => 2013-03-14|sit|Mom|01:00
    [9] => 2013-03-15|amet|Mom|01:45
)

发布表单后,数组将如下所示:

Array
(
    [0] => 2013-03-08|dolor|Dad|01:45
    [1] => 2013-03-09|sit|Dad|01:00
    [2] => 2013-03-10|amet|Mom|01:45
    [3] => 2013-03-11|Lorem|Mom|01:45
    [4] => 2013-03-12|ipsum|Mom|01:00
)

实现这一目标的最简单方法是什么?

有什么想法吗?

/的Janne

2 个答案:

答案 0 :(得分:2)

我建议使用array_filter()函数。

$startDate = strtotime('2013-03-08');
$endDate = strtotime('2013-03-12');

$array = array(...); // your input array

$filteredArray = array_filter($array, function($value) use ($startDate, $endDate) {
    $valArray = explode('|', $value);
    $date = strtotime($valArray[0]);
    return ($date >= $startDate && $date <= $endDate);
});

请注意,以上内容适用于PHP&gt; = 5.3.0对于旧版本,您必须使用命名函数替换匿名函数并将其调用如下:

$startDate = strtotime('2013-03-08');
$endDate = strtotime('2013-03-12');

$array = array(...); // your input array

$filteredArray = array_filter ($array, 'filterArray');

function filterArray ($value) {
    global $startDate;
    global $endDate;
    $valArray = explode('|', $value);
    $date = strtotime($valArray[0]);
    return ($date >= $startDate && $date <= $endDate);
}

答案 1 :(得分:0)

你可以这样做:

让$ date成为你的输入数组

$dates = array(
           '0' => '2013-03-06|Lorem|Mom|01:45',
           '1' => '2013-03-07|ipsum|Dad|01:00',
           '2' => '2013-03-08|dolor|Dad|01:45',
           '3' => '2013-03-09|sit|Dad|01:00',
           '4' => '2013-03-10|amet|Mom|01:45',
           '5' => '2013-03-11|Lorem|Mom|01:45',
           '6' => '2013-03-12|ipsum|Mom|01:00',
           '7' => '2013-03-13|dolor|Dad|01:45',
           '8' => '2013-03-14|sit|Mom|01:00',
           '9' => '2013-03-15|amet|Mom|01:45)'
        );


$startDate = "2013-03-08";
$endDate = "2013-03-12";

$new_startDate = strtotime($startDate);
$new_endDate = strtotime($endDate);

$user_dates = array();

foreach ($dates as $date) {
    $date_values = explode('|', $date);
    $current_date_value = $date_values[0];
    $current_date_value = strtotime($current_date_value);

    if ($current_date_value >= $new_startDate && $current_date_value <= $new_endDate) {
        $user_dates[] = $date;
    }
}

$user_dates将保留您需要的日期

希望这可以帮助你:)