Удалить объекты из массива в CodeIgniter - PullRequest
1 голос
/ 29 мая 2019

У меня есть эта функция:

public function get_free_courtrooms() {
        $post = file_get_contents('php://input');
        $_POST = json_decode($post, true);

        $date = $this->input->post('date', true);
        $time_start = $this->input->post('time_start', true);
        $time_end = $this->input->post('time_end', true);

        $where = array('date' => $date);
        $reservations = $this->MY_Model->get('reservations', $where);

        $courtrooms = $this->MY_Model->get('courtrooms');

        $output = array(
            'free_courtrooms' => $free_courtrooms
        );

        echo json_encode($output);
        exit();
    }

Мне нужно удалить все залы судебных заседаний из $ залов судебных заседаний, которые забронированы в часы отправки ($ time_start, $ time_end).

В таблице бронирования у меня есть:

  • id
  • courtroom_id
  • дата
  • TIME_START
  • time_end

1 Ответ

2 голосов
/ 29 мая 2019

Я бы начал с простой функции для проверки перекрытия 2 раза:

function isOverlap($s1, $e1, $s2, $e2) {
    return (($s1 > $s2 && $s1 < $e2) || ($e1 > $s2 && $e1 < $e2)
            || ($s1 < $s2 && $e1 > $2) || ($s1 > $s2 && $e1 < $e2));
}

Это будет визуализация 4 случаев:

---     |    ---  |   -------   |     ---
  ---   |   ---   |     ---     |   -------

Теперь просто заполните массив всех занятых комнат:

foreach($reservations as $res) {
    if (isOverlap($time_start, $time_end, $res["start"], $res["end"]))
        $busy_courtrooms[] = $res["id"]; 
}

Теперь вычислите разницу между всеми $courtrooms и $busy_courtrooms, используя array-diff :

$free_courtrooms = array_diff($courtrooms, $busy_courtrooms);

И вы сделали

Я не знаю, как строится ваш массив $reservations, но я думаю, что он имеет атрибуты "start" и "end" ...

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...