簡體   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