-4

次の配列と 2 つの変数: startDate と endDate を使用して、php で記述されたフォームを取得しました。

私がやりたいことは、ユーザー定義の日付範囲内にある日付のみを表示することです。

$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 に答える