Как отфильтровать массив содержимого даты от текущей даты до ..? - PullRequest
0 голосов
/ 11 ноября 2019
$personas = [
    'Joe' => [
         'date' => ['start' => '1927-10-01','end' => '2009-11-24'],
         'statement' => 'Opa'
      ],
    'Pam' => [
         'date' => ['start' => '1975-06-21','end' => ''], // empty means infinite
    'statement' => 'Mother'
      ],
    'Sara' => [
         'date' => ['start' => '2020-01-01','end' => '2020-11-12'],
         'statement' => 'cam on baby'
      ],
    'Karl' => [
         'date' => ['start' => '2019-11-11','end' => '2019-11-12'],
         'statement' => 'fresh'
      ],
],

Возьмите только человека, который в текущем периоде #

(фактическая дата 2019-11-11)

$actualDate = date("Y-m-d");
foreach($personas as $date => $person) {
 if ($person['date']['start'] >= $startDate  &&  $person['date']['end'] <= $endDate){
  echo $person.': '.$person['statement']'<br>';
  }
}

ожидается:
Пэм: мама
Карл: свежий

1 Ответ

2 голосов
/ 11 ноября 2019

Пара вещей - ваш тест использует поля, которые не определены, я предполагаю, что вы хотите вычислить его по фактическому полю даты ($actualDate). Я также добавил пункт о том, что дата окончания совпадает, если дата окончания в записи empty() или >= текущая дата (я также немного изменил вывод).

Другая вещьявляется то, что ваши данные неверны для Karl для вывода, я предполагаю, что вы имели в виду данные имеют конечную дату '2019-11-12' ...

'Karl' => [
    'date' => ['start' => '2019-11-11','end' => '2019-11-12'],
    'statement' => 'fresh'
],

И код ...

$actualDate = date("Y-m-d");
foreach($personas as $name => $person) {
    if ($person['date']['start'] <= $actualDate  &&  
            (empty($person['date']['end']) || $person['date']['end'] >= $actualDate )){
        echo $name.': '.$person['statement'].PHP_EOL;
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...