Unset элемент в массиве, вложенный, между временным интервалом - PullRequest
2 голосов
/ 20 октября 2019

Я пытаюсь удалить элемент.

У меня есть резервирование с:

$StartTime = "14:00"; $EndTime = "16:30";

и Массив с

Array
(
    [Tennis 1] => Array
        (
            [IntervalTime] => Array
                (
                    [Lun] => Array
                        (
                            [0] => 10:00
                            [1] => 11:00
                            [2] => 12:00
                            [3] => 13:00
                            [4] => 14:00
                            [5] => 15:00
                            [6] => 16:00
                            [7] => 17:00
                            [8] => 18:00
                            [9] => 19:00
                            [10] => 20:00
                        )

                    [Mar] => Array
                        (
                            [0] => 12:00
                            [1] => 13:00
                            [2] => 14:00
                            [3] => 15:00
                        )

                    [Mer] => Array
                        (
                            [0] => 09:00
                            [1] => 10:00
                            [2] => 11:00
                            [3] => 12:00
                            [4] => 13:00
                        )

                    [Gio] => Array
                        (
                            [0] => 09:00
                            [1] => 10:00
                            [2] => 11:00
                            [3] => 12:00
                            [4] => 13:00
                        )

                    [Ven] => Array
                        (
                            [0] => 09:00
                            [1] => 10:00
                            [2] => 11:00
                            [3] => 12:00
                            [4] => 13:00
                        )

                    [Sab] => Array
                        (
                            [0] => 09:00
                            [1] => 10:00
                            [2] => 11:00
                            [3] => 12:00
                            [4] => 13:00
                            [5] => 14:00
                            [6] => 15:00
                            [7] => 16:00
                            [8] => 17:00
                            [9] => 18:00
                        )

                    [Sun] => Array
                        (
                            [0] => 09:00
                            [1] => 10:00
                            [2] => 11:00
                            [3] => 12:00
                            [4] => 13:00
                            [5] => 14:00
                            [6] => 15:00
                            [7] => 16:00
                            [8] => 17:00
                            [9] => 18:00
                        )

                )

        )

Мне нужно удалитьэлемент между $ StartTime и $ EndTime поэтому для массива "Lun" необходимо удалить:

                            [0] => 10:00
                            [1] => 11:00
                            [2] => 12:00
                            [3] => 13:00
                            [4] => 14:00 // need remove
                            [5] => 15:00 // need remove
                            [6] => 16:00 // need remove
                            [7] => 17:00
                            [8] => 18:00
                            [9] => 19:00
                            [10] => 20:00

Я бы рассчитал время с Начало до Конец даты, а затем удалил с помощью:

unset($DisponibilitaRoom[$Nomeroom]["IntervalTime"]["Lun"][$index]);

Ответы [ 2 ]

0 голосов
/ 20 октября 2019

Вы можете использовать array_walk_recursive с array_map и array_filter

array_walk_recursive($a['Tennis 1']['IntervalTime'], function(&$v) use ($StartTime, $EndTime){
    if($v >= $StartTime && $v <= $EndTime) $v = false;
});
$f['Tennis 1']['IntervalTime'] = array_map('array_filter', $a['Tennis 1']['IntervalTime']);
print_r($f);

Рабочий пример: - https://3v4l.org/4tNEM

0 голосов
/ 20 октября 2019

Вы исправляете - простой unset должен это сделать - но вам нужно зациклить время и удалить их как:

foreach($arr['Tennis 1']['IntervalTime']['Lun'] as $k => $v) {
    if ($v >= $StartTime && $v < $EndTime)
        unset($arr['Tennis 1']['IntervalTime']['Lun'][$k]);
}

Пример в реальном времени: 3v4l

Или вы можете использовать array-filter как

$arr['Tennis 1']['IntervalTime']['Lun'] = array_filter($arr['Tennis 1']['IntervalTime']['Lun'], function ($v) use ($StartTime, $EndTime) {
    return !($v >= $StartTime && $v < $EndTime);
} );
...