@Mr_Joe

Как сделать проверку по времени?

Все привет! Есть
массив
Array
(
    [11:12] => Array
        (
            [0] => Утро
            [1] => 
        )

    [13:34] => Array
        (
            [0] => Утро
            [1] => 
        )

    [20:12] => Array
        (
            [0] => программа 2
            [1] => 
        )

    [20:54] => Array
        (
            [0] => Программа 1
            [1] => 
        )

    [21:12] => Array
        (
            [0] => Программа 1
            [1] => 
        )

    [23:54] => Array
        (
            [0] => Утро
            [1] => 
        )
)

Мне нужно вывести из этого массива данные, которые подходят по времени.
Вот как я делаю
date_default_timezone_set('Europe/Moscow');
    $time = date('H:i');

    $max = '';
    
    //массив
    $list = schedule();

    foreach ($list as $key => $val) {
        if($time < $key) {
            $max = $key;
            break;
        }
    }

    foreach ($list as $key => $item) {

        if(($time >= $key) && ($time <= $max)) {
            //return json_encode($list[$key]);
            echo json_encode($list[$key]);
            break;
            return 0;
        }
    }
    return 0;

Я не могу понять, как сделать проверку по времени.
Помогите несчастному человеку!
  • Вопрос задан
  • 116 просмотров
Решения вопроса 2
@LemonFox
stateless mind
$currentTime = date("H:i");
$list = ksort(schedule());

foreach ($list as $key => $val) {
        if($currentTime < $key) {
            continue;
        }
        return json_encode($val);
}
return json_encode(['error'=>'not found']);
Ответ написан
@Mr_Joe Автор вопроса
В голову пришло только это
function er() {
    date_default_timezone_set('Europe/Moscow');
    $currentTime = date("H:i");
    $list = schedule();
    $id = 0;
    
    foreach ($list as $key => $val) {
        if(strtotime($currentTime) > strtotime($key)) {
            $id = $key;
            continue;
        }
        return( $list[$id] );
    }
    print_r( current( $list[$id] ) );
}
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 2
@choupa
Архитектор (обычный, который строит)
Вы не написали, в чём эта проверка состоит? Какой критерий?

Попробую понять из кода. Но он выглядит странно, выглядит ошибочным, т.к. бестолковые действия выполняет. Комментирую ваш код.

date_default_timezone_set('Europe/Moscow');
    $time = date('H:i');

    $max = '';
    
    //массив
    $list = schedule();

    foreach ($list as $key => $val) {
        if($time < $key) {
            $max = $key;
            break;
//  Как только нашёл первый ключ с временем больше настоящего момента,
//  то цикл сразу прерывается. Это выглядит странным, т.к. могут быть ключи с ещё большим
//  значение времени, и переменная $max вовсе не содержит, как можно было бы подумать,
//  максимальное значение времени в массиве.
        }
    }

    foreach ($list as $key => $item) {

        if(($time >= $key) && ($time <= $max)) {
//  Второе условие бессмысленно, т.к. всегда выполняется (для любого элемента),
//  либо не выполняется никогда, если осталось дефолтным $max == ''.
//  Поэтому проверка этого условия внутри цикла для каждого элемента выглядит странным.


            //return json_encode($list[$key]);
            echo json_encode($list[$key]);
            break;
            return 0;
        }
    }
    return 0;
Ответ написан
// Массив данных
$arr = [];

// Текущее время
$currentTime = date("H:i");

// Проверка на наличие данных для текущего времени
if (array_key_exists($currentTime, $arr)) {
  
  // Отображаем данные
  print_r($arr[$currentTime]));
}
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы