如何使用小于

时间:2017-11-02 13:06:36

标签: php arrays filter

我在php中有以下数组,我试图在日期过滤。日期存储为" Ymd" DropDate键中的格式。

我想在Dropdate< Dropdate< 20171102所以它只显示我1条记录。

array(3) {
    [0]=>
    array(30) {
        ["Id"]=>
        int(18762)
        ["DropDate"]=>
        string(8) "20171101"
    }
    [1]=>
    array(30) {
        ["Id"]=>
        int(18760)
        ["DropDate"]=>
        string(8) "20171102"
    }
    [2]=>
    array(30) {
        ["Id"]=>
        int(18258)
        ["DropDate"]=>
        string(8) "20171102"
    }
}

我使用了以下代码,但在json_encode时添加了[{0:" Id":18280," ...]。

$records = array_filter($bookings, function($value) {
        $todays_date = date('Ymd');
        return $value['DropDate'] < (int)$todays_date;
    });

我不确定如何在dropdate字段的值小于value的情况下执行array_search。

$todays_date = date('Ymd');
    if(($key = array_search($todays_date, array_column($student,'DropDate'))) !== false) {
        unset($student[$key]);
    }

然后,当我执行json_encode将其返回到我的应用程序时,我会遇到奇怪的行为,比如在每个对象的前面添加0和1。

 [{"0":{"Id":18280,"DropDate":"20171030"},"1":{"Id":18284,"DropDate":"20171101"}}]  

我的申请预计没有0或1

 [{"Id":18280,"DropDate":"20171030"},{"Id":18284,"DropDate":"20171101"}]

2 个答案:

答案 0 :(得分:1)

array_filter是正确的方法。

注意:比较两个日期字符串的效果与比较两个时间戳的效果一样,但恕我直言,使用时间戳会更好。

试试这个:

$records = array_filter($bookings, function ($row) {
    return $row['DropDate'] < date('Ymd');
});

echo json_encode($records);

输出:

[{"Id":18762,"DropDate":"20171101"}]

eval.in demo

答案 1 :(得分:1)

我使用功能强大的DateTimearray_filter

来实现这一目标
<?php
$bookings = [
  ['Id' => 18762, 'DropDate' => '20171101'],
  ['Id' => 18760, 'DropDate' => '20171102'],
  ['Id' => 18258, 'DropDate' => '20171102'],
];

$records = array_filter($bookings, function ($row) {
  $today = DateTime::createFromFormat('Y-m-d', date('Y-m-d'))->format('U');
  $booking_date = DateTime::createFromFormat('Ymd', $row['DropDate'])->format('U');
  return $booking_date < $today;
});

print_r($records);

这给出了:

Array
(
    [0] => Array
        (
            [Id] => 18762
            [DropDate] => 20171101
        )

)

更好地使用时间戳。希望这会有所帮助。

演示:https://eval.in/891570

关于问题末尾的JSON内容

$input = <<<JSON
[{"0":{"Id":18280,"DropDate":"20171030"},"1":{"Id":18284,"DropDate":"20171101"}}] 
JSON;

您可以从您的来源解码,如:

$decoded = json_decode($input, true);
$bookings = array_values($decoded[0]);

然后使用上面的代码。

演示:https://eval.in/891591