Есть начальная выборка данных из базы данных. 1. id группы 2. название группы, 3.id группы более высокого порядка для этой группы 4. Активность группы
1 - Школа 9 - Null - 1.
2 - Класс 3 - 1 - 1
3 - Класс 3А - 2 - 1
4 - Класс 3Б - 2 - 0
5 - Школа 10 - Null - 1.
6 - Класс 4- 5 -1
7 - Класс 5- 5 -0
8 - Класс 5А - 7 - 1
9 - Класс 6 - 5 - 1
10 - Класс 6А - 9 - 0
Как видим, в школе номер 10, неактивность группы установлена для всех 5 классов (хотя 5А числится активным, но группа более высокого порядка делает его также неактивным). И класс 6А 3Б числится также неактивным.
И есть входящий список
$list[Школа 11][Класс 11][Класс 11А]="54654.doc";
$list[Школа 10][Класс 9]{Класс 9А}="56.doc";
$list[Школа 9][Класс 3][Класс 3А]="434.doc";
$list[Школа 9][Класс 3][Класс 3Б]="564.doc";
$list[Школа 10][Класс 5][Класс 5Е]="454.doc";
В данном списке мы видим новые группы (которых нет в нашей базе данных и их нужно создать в базе - школа 11, класс 11 и класс 11а (с зависимостью между ними) и отбросить из обработки те классы, которые в базе данных помечены как неактивные, то есть необрабатывать все пятые классы из школы 10 и не обрабатывать класс 3б из девятой школы и.т.д. Данный список необзательно 3 уровневый. Например, в школе может не быть А, Б, В классов и быть всего 1 класс. То есть 2 уровень иерархии может быть последним, к примеру. Может быть и ситуация обратная, когда, например, в 3А классе, будет две подгруппы, тогда уровень иерархии будет состоять из 4 звеньев.
Есть две проблемы - во входящем списке нет id искать можно только по наименованию, при этом есть полный путь к этой группе (то есть нельзя перепутать 5 класс одной школы с другой школой).
Помогите, пожалуйста, с задачей, нужно отфильтровать из обработки те группы, которые неактивны и внести в базу данных информацию о новых появившихся группах и взаимосвязи между ними. Понятно, что новые группы можно внести в базу данных поочередно, получив id группы более высокого порядка, если такая в базе данных до этого не была