Как предотвратить дублирование значений в многомерном массиве php

#php #arrays

#php #массивы

Вопрос:

У меня есть этот код:

 <?php

$schedules = array();
$schedules[0]['start_hour'] = "08:00:00";
$schedules[1]['start_hour'] = "08:15:00";
$schedules[2]['start_hour'] = "08:30:00";
$schedules = json_encode($schedules);
$schedules = json_decode($schedules, FALSE);

for ($i = strtotime("08:00:00"); $i <= strtotime("09:00:00"); $i = $i 15*60):
    foreach($schedules as $sch):
        if($i == strtotime($sch->start_hour)):
            echo date("H:i", $i)." SCHEDULED! <br>";
        else:
echo date("H:i", $i)." NOT SCHEDULED :( <br />";
        endif;
    endforeach;
endfor;

?>
  

У меня это первый for, который отправляется с 08:00:00 до 09:00:00 каждые 15 минут, и у меня есть второй foreach, который проверяет внутри этого массива, какие часы я запланировал. у меня есть это, если кто проверяет, какие часы в первом для находятся в массиве расписаний, и распечатывает его, а если нет в массиве, печатает как НЕ ЗАПЛАНИРОВАННЫЕ.
Проблема в том, что когда у меня есть 2 или более расписаний в массиве, выходные данные дублируют значения. В этом примере вывод:

 08:00 SCHEDULED!
08:00 NOT SCHEDULED :(
08:00 NOT SCHEDULED :(
08:15 NOT SCHEDULED :(
08:15 SCHEDULED!
08:15 NOT SCHEDULED :(
08:30 NOT SCHEDULED :(
08:30 NOT SCHEDULED :(
08:30 SCHEDULED!
08:45 NOT SCHEDULED :(
08:45 NOT SCHEDULED :(
08:45 NOT SCHEDULED :(
09:00 NOT SCHEDULED :(
09:00 NOT SCHEDULED :(
09:00 NOT SCHEDULED :(
  

и я хочу что-то вроде:

 08:00 SCHEDULED!
08:15 SCHEDULED!
08:30 SCHEDULED!
08:45 NOT SCHEDULED :(
09:00 NOT SCHEDULED :(
  

Что я могу сделать?

Комментарии:

1. помещайте значение в массив по РАСПИСАНИЮ и всегда проверяйте, существует ли запланированный ключ / значение

Ответ №1:

Начните с упрощения процесса, создайте простой массив забронированных времен, чтобы вы могли использовать in_array() его внутри одного цикла

 $schedules = array();
$schedules[0]['start_hour'] = "08:00:00";
$schedules[1]['start_hour'] = "08:15:00";
$schedules[2]['start_hour'] = "08:30:00";

#Make simple array of booked times
$booked = [];
foreach ( $schedules as $sch ):
    $booked[] = strtotime($sch['start_hour']);
endforeach;

for ($i = strtotime("08:00:00"); $i <= strtotime("09:00:00"); $i = $i 15*60):
    if( in_array($i, $booked)):
        echo date("H:i", $i)." SCHEDULED! n";
    else:
        echo date("H:i", $i)." NOT SCHEDULED :( n";
    endif;
endfor;
  

Результат

 08:00 SCHEDULED! 
08:15 SCHEDULED! 
08:30 SCHEDULED! 
08:45 NOT SCHEDULED :( 
09:00 NOT SCHEDULED :( 
  

Комментарии:

1. что, если у меня есть идентификатор события в массиве, например: $schedules[0][‘event_id’] = 230, как я могу получить идентификатор каждого события в ЗАПЛАНИРОВАННЫХ результатах, пример: ссылка

2. sandbox.onlinephpfunctions.com/code/…