Php фильтр многомерный массив - PullRequest
0 голосов
/ 11 июля 2019

У меня есть такой массив:

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. Таким образом, в результате появятся элементы с идентификаторами 534 и 100. Или дата> = 2019-07-05 или дата <= 2019-01-01? </p>

Я знаю, что есть функция array_filter, но не могу понять, как ее использовать в этом случае? Пожалуйста, помогите, спасибо

Ответы [ 3 ]

0 голосов
/ 11 июля 2019

Всегда проверяйте официальную документацию на php.net, потому что она обычно содержит множество примеров и очень подробных объяснений.

В вашем случае вы можете сравнивать даты как строки (так как они в формате Y-m-d и сравнение их в алфавитном порядке поможет):

$filtered = array_filter($arr, function ($item) {
    return ($item['lead_data']['date'] > '2019-05-01') && ($item['lead_data']['date'] < '2019-07-12');
});
0 голосов
/ 11 июля 2019

Используя 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);
0 голосов
/ 11 июля 2019

Самое простое решение - просто перебрать ваши данные следующим образом:

 <?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);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...