代码之家  ›  专栏  ›  技术社区  ›  snowflakes74

如何使用array\u搜索值小于

  •  3
  • snowflakes74  · 技术社区  · 7 年前

    我在php中有以下数组,我试图在日期上对其进行过滤。日期以“Ymd”格式存储在DropDate键中。

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

    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"
        }
    }
    

    我使用了以下代码,但它添加了[{0:“Id”:18280,“…]当我对它进行json_编码时。

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

    我不知道如何在dropdate字段的小于值上进行array\u搜索。

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

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

    我的应用程序预计这不会是0或1

     [{"Id":18280,"DropDate":"20171030"},{"Id":18284,"DropDate":"20171101"}]
    
    2 回复  |  直到 6 年前
        1
  •  1
  •   Ethan Arti Singh    7 年前

    array_filter 是正确的选择。

    注意:比较两个日期字符串和比较两个时间戳一样有效,但最好使用时间戳。

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

    输出:

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

    eval.in demo

        2
  •  1
  •   alistaircol    7 年前

    DateTime 随着 array_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