Laravel / PHP фильтрация данных много раз - PullRequest
0 голосов
/ 27 января 2020

У меня есть такая база данных

+------------+----------------------------+---------------------------+
|     day    |        start_time          |          end_time         |
+---------------------------------------------------------------------+
|    Sunday  |       01:00                |         03:00             |
|    Sunday  |       13:00                |         15:00             |
|    Sunday  |       19:00                |         21:00             |
+------------+----------------------------+---------------------------+

, и для проверки даты я делаю цикл

// **nowTime = 02:00**
$get = DateModel::find($id)->get();
foreach($get as $result){
     if(nowTime >= $result->start_time && nowTime <= $result->end_time){
         echo "in range time";
     }else{
         echo "not in range time";
     }
}

и результат:

in range time  not in range time  not in range time

i просто хочу показать только 1 результат, если есть "в диапазоне времени",

и если все данные не в диапазоне времени, go в другое.

есть идеи?

1 Ответ

1 голос
/ 27 января 2020

Вы можете использовать mapToGroups метод сбора.

$get = DateModel::get()
    ->mapToGroups(function ($item, $key) {
        $nowTime = '02:00';

        if ($nowTime >= $item->start_time && $nowTime <= $item->end_time) {
            return ['in range time' => $item];
        } else {
            return ['not in range time' => $item];
        }
    });

Результат

array:2 [
  "in range time" => array:1 [
    0 => array:3 [
      "day" => "Sunday"
      "start_time" => "01:00"
      "end_time" => "03:00"
    ]
  ]
  "not in range time" => array:2 [
    0 => array:3 [
      "day" => "Sunday"
      "start_time" => "13:00"
      "end_time" => "15:00"
    ]
    1 => array:3 [
      "day" => "Sunday"
      "start_time" => "19:00"
      "end_time" => "21:00"
    ]
  ]
]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...