【问题标题】:Php filter multidimensional arrayphp过滤器多维数组
【发布时间】:2019-11-20 22:43:05
【问题描述】:

我有这样的数组:

arr=[
   627=[
   'lead_data'=>['name'=>'Name1',  'date'=>'2019-04-09']
   ],
   500=[
   'lead_data'=>['name'=>'Name2',  'date'=>'2018-05-07']
   ],
   534=[
  'lead_data'=>['name'=>'Name3',  'date'=>'2019-07-10']
   ],
  100=[
  'lead_data'=>['name'=>'Name4',  'date'=>'2019-05-12']
  ],

 ]

如何过滤日期在 2019-05-01 和 2019-07-12 之间的数组。 所以结果会有 id 为 534 和 100 的元素。 或者日期是 >= 2019-07-05 还是日期是

我知道有 array_filter 函数,但不明白在这种情况下如何使用它?请帮忙,谢谢

【问题讨论】:

  • 代码在哪里?

标签: php arrays filter


【解决方案1】:

最简单的解决方案是像这样迭代您的数据:

 <?php
        $begin = date('Y-m-d', strtotime("2019-05-01"));
        $end = date('Y-m-d', strtotime("2019-07-12"));

        foreach($array as $key => $data) 
        {
           $date = date('Y-m-d', strtotime($$data['date']));
           if (($$data > $begin) && ($date < $end)){
               unset($array[$key]);
           }
        }
        var_dump($array);

【讨论】:

    【解决方案2】:

    请务必查看 php.net 上的 official documentation,因为它通常有大量示例和非常详尽的解释。

    在您的情况下,您可以将日期作为字符串进行比较(因为它们是 Y-m-d 格式并按字母顺序比较它们就可以了):

    $filtered = array_filter($arr, function ($item) {
        return ($item['lead_data']['date'] > '2019-05-01') && ($item['lead_data']['date'] < '2019-07-12');
    });
    

    【讨论】:

      【解决方案3】:

      通过使用array_filter()use 关键字,您可以将变量提供给过滤器——这可以是您的限制的开始日期和结束日期。

      使用array_filter()时,如果回调中的return值为真,则数据将保留在数组中,否则将被移除。然后比较日期,看看它们是否大于$from,小于$to

      $from = '2019-05-01';
      $to = '2019-07-12';
      $result = array_filter($arr, function ($v) use ($from, $to) {
          return $v['lead_data']['date'] > $from && $v['lead_data']['date'] < $to;
      });
      print_r($result);
      

      【讨论】:

        猜你喜欢
        • 2018-07-07
        • 1970-01-01
        • 1970-01-01
        • 2012-12-04
        • 1970-01-01
        • 1970-01-01
        • 2020-03-27
        • 2021-07-14
        • 1970-01-01
        相关资源
        最近更新 更多