-4

我有一个用 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
)

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

有什么想法吗?

/珍妮

4

2 回答 2

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 >= 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);
}
于 2013-03-20T18:10:28.933 回答
0

你可以这样做:

让 $dates 成为您的输入数组

$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将保留您需要的日期

希望这可以帮助你:)

于 2013-03-20T18:14:28.273 回答