UPDATE: После ответов я получил, я понял, что я Шоуда пытается решить эту проблему уже с запросом к базе данных, так что я написал a more detailed post hereСравнение двух многомерных массивов и неустановленные соответствующие элементы
ОРИГИНАЛЬНЫЙ ПОСТ: Я бы как сравнить два многомерных массива и избавиться от элементов, которые соответствуют определенным критериям. Я знаю, что мне придется перебирать массивы с помощью некоторых клавиш, а затем отключать, но я не могу сделать это правильно.
Два массива: $all
, в котором хранятся все доступные комнаты и их кровати и $reserved
, в которых зарезервированы только зарезервированные комнаты и зарезервированные кровати.
Я хочу пройти через все оговорки и взять название комнаты, которое находится в позиции $reservations[x][0]
, где x - просматриваемая в данный момент резервирование, и сравнить ее со всеми элементами в $all[a][0]
, где находится просматриваемая в данный момент комната.
Итак, когда я нахожу, что значение $all[0][0]
=> «Luxury Room» совпадает с $reservations[0][0]
=> «Luxury Room» Я буду смотреть на кровати и код кровати на позиции у где у текущего рассматривается код $reservations[x][1][y]
кровать и сравните его со всеми доступными кроватями для подходящей комнаты, поэтому с $all[0][1][b]
, где b - все доступные номера.
И когда я узнаю, что значение $all[0][1][1]
=> «ХХ2» соответствует значению в $reservations[0][1][0]
=> «ХХ2» Я буду незадан индекс 01 из $all
так, наконец, когда я буду цикл через $all
массив и было бы перечислить индекс каждого элемента [0] в качестве заголовка и элементов массива по индексу 1 как кровати, я бы только получить кровать «xx2» как доступные «Luxury Room»
//$all is an array where index 0 is an array
$all = array(0=>array(
//index 0 has value 'Luxury Room' (room title)
0=>'Luxury Room',
//index 1 is an array
1=>array(
//where index 0 has value 'xx1' (bed code)
0=>'xx1',
//where index 1 has value 'xx2' (bed code)
1=>'xx2')),
//again index 1 is an array etc. just as above...
1=>array(
0=>'Cheap Room',
1=>array(
0=>'zz1',
1=>'zz2',
2=>'zz3',
3=>'zz4')));
$reserved = array(0=>array(
0=>'Luxury Room',
1=>array(0=>'xx2')));
Есть ли способ сделать это с помощью соответствующих запросов к базе данных вместо борьбы с этим чудовищем? Просто любопытно. –
Может быть, но я не дошел так далеко, как с этой идеей. В основном у меня есть столовые, в которых есть ID и BEDS, с общим количеством кроватей. Таким образом, я хотел преобразовать это через цикл в этот простой массив, потому что в конце концов все, что мне нужно, это доступные идентификаторы комнат с их доступными кроватями. Вторая таблица - это оговорки, в которых есть FROM (дата), TO (дата), ROOMS_ID (int) и BED_NUMBER (int) –
Но я не знаю, как написать запрос, который займет свободные комнаты. сравните их с диапазонами дат в резервировании для каждой комнаты и ее кроватей, а затем верните таблицу, в которой есть только ROOMS_ID и номера кроватей в каждом поле. –