I have an array of rows containing room availability for different dates for a hotel. I need to filter the array to identify on which dates the hotel has no vacancy.
$array = [
["room_id" => "1", "date" => "01-07-2022", "available" => "A"],
["room_id" => "2", "date" => "01-07-2022", "available" => "A"],
["room_id" => "1", "date" => "02-07-2022", "available" => "A"],
["room_id" => "2", "date" => "02-07-2022", "available" => "U"],
["room_id" => "1", "date" => "03-07-2022", "available" => "U"],
["room_id" => "2", "date" => "03-07-2022", "available" => "U"],
["room_id" => "1", "date" => "04-07-2022", "available" => "U"],
]
01-07-2022 has only A entries, so that date has vacancies.
02-07-2022 has A and U entries, so that date has vacancies.
03-07-2022 has only U entries, so that date has NO vacancies.
04-07-2022 has only U, so that date has NO vacancies.
The expected result indicating dates with no vacancies::
[
[
"room_id" => "2",
"date" => "03-07-2022"
"available" => "U"
],
[
"room_id" => "1",
"date" => "04-07-2022"
"available" => "U"
],
]
I've tried the following:
foreach ($roomsArr as $room) {
if ($room['availability'] === 'U') {
$unavailable[] = $room;
}
else if ($room['availability'] === 'A') {
$available[] = $room;
}
}
foreach ($unavailable as $uv) {
foreach ($available as $av) {
if ($av['date'] === $uv['date']) {
if ($av['availability'] === 'A' && $uv['availability'] === 'A') {
}
else if ($av['availability'] === 'A' && $uv['availability'] === 'U') {
}
else if ($av['availability'] === 'U' && $uv['availability'] === 'U') {
$arr1[] = $av;
}
}
}
}