Удалить строку из результата массива из запроса codeigniter - PullRequest
0 голосов
/ 05 февраля 2020

Я выполняю приведенный ниже запрос в codeigniter, который возвращает 4 строки:

$available_rooms = $this->db->query("SELECT id_room as id, ea_rooms.name as name FROM ea_rooms_services WHERE id_service =" . $service_id)->result_array();

Вывод например:

 {
{id:1, name:a}
{id:2, name:b}
{id:3, name:c}
{id:4, name:d}
}

У меня есть массив с идентификаторами номеров $occupiedRooms (например, {0=>1, 1=>2}) который заполняется следующим образом:

$occupiedRooms = array();

foreach ($listing as $element){
... SOMECODE
    if ($id_room != null)
         $occupiedRooms[] = $id_room;
}

Я хочу сбросить все строки в $available_rooms, которые имеют одинаковые идентификаторы в $occupiedRooms.

Ожидаемый результат:

 {
{id:3, name:c}
{id:4, name:d}
}

Я использую код ниже, но он не работает

foreach ($available_rooms as $elementKey => $element){
    if(in_array($element['id'], $occupiedRooms)){
       unset($available_rooms[$elementKey]);
    }
}

Я также пробовал array_filter с кодом ниже, но он также не работал:

foreach ($occupiedRooms as $id){
    $available_rooms = array_filter($available_rooms, function($room) use($id)
        {
             return $room['id'] != $id;
        });
}

1 Ответ

1 голос
/ 05 февраля 2020

это будет короче:

$occupied_rooms = array(1,5,6);

$available_rooms = $this->db->query("SELECT id_room as id, ea_rooms.name as name FROM ea_rooms_services WHERE id_service =" . $service_id . " AND id_room NOT IN ( " . implode(",", $occupied_rooms) . " ) ")->result_array();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...