繁体   English   中英

PHP过滤器多维数组

[英]Php filter multidimensional array

我有这样的数组:

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 或日期是 <= 2019-01-01 ?

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

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

 <?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);

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

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

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

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

使用array_filter() ,如果回调中的return值为 true,则数据将保留在数组中,否则将被删除。 然后比较日期,看看它们是否大于$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);

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM