从FROM DATE和TO DATE之间的数组中删除日期

时间:2014-07-05 05:11:39

标签: php date

我有像这样的PHP数组

Array ( 
    [0] => Array ( 
             [date] => 21/07/2014 
             [total_booking] => 1 
           ) 
    [1] => Array ( 
             [date] => 1/08/2014 
             [total_booking] => 1 
           ) 
    [2] => Array ( 
             [date] => 2/09/2014 
             [total_booking] => 2 
           )
)

如果我获得了值$_POST['from_date']$_POST['to_date'],则应移除此from_date,to_date之外的所有数组。

编辑我的代码

foreach ($newarray as $newarray){
if ($newarray[Date] < $to_date && $from_date > $newarray[Date])
{
 // i want to remove this row from array
}

}

1 个答案:

答案 0 :(得分:2)

这是使用array_filter的解决方案:

<?php

$data = array(
    array(
        'date' => '21/07/2014',
        'total_booking' => '1'
    ),
    array(
        'date' => '1/08/2014',
        'total_booking' => '1'
    ),
    array(
        'date' => '2/09/2014',
        'total_booking' => '2'
    )
);

$from_date = strtotime('01-08-2014'); //$_POST['from_date']
$to_date = strtotime('21-08-2014'); //$_POST['to_date']

$data = array_filter($data, function($array) use ($from_date, $to_date) {
    $epoch = strtotime(str_replace('/', '-', $array['date']));
    return $epoch >= $from_date && $epoch <= $to_date;
});

$data = array_values($data);

print_r($data);

Output

Array
(
    [0] => Array
        (
            [date] => 1/08/2014
            [total_booking] => 1
        )

)

仅输出一个元素,因为1/08/20141/08/2014之间只有21/08/2014

对于早期的PHP版本:

function filter($array) {
    $from_date = strtotime('01-08-2014'); //$_POST['from_date']
    $to_date = strtotime('21-08-2014'); //$_POST['to_date']

    $epoch = strtotime(str_replace('/', '-', $array['date']));
    return $epoch >= $from_date && $epoch <= $to_date;
}

$data = array_filter($data, 'filter');