Допустим, у меня есть массив, как эторекурсивная функция, которая выводит таблицу ссылок
Array(
Array("id_1" => 1,"id_2" => 1,"name" => "test1","type" => "A","ref_1" => 0,"ref_2" => 0,),
Array("id_1" => 1,"id_2" => 2,"name" => "test2","type" => "B","ref_1" => 1,"ref_2" => 1,),
Array("id_1" => 1,"id_2" => 3,"name" => "test3","type" => "B","ref_1" => 1,"ref_2" => 1,),
Array("id_1" => 2,"id_2" => 1,"name" => "test4","type" => "B","ref_1" => 1,"ref_2" => 1,),
Array("id_1" => 2,"id_2" => 3,"name" => "test5","type" => "C","ref_1" => 1,"ref_2" => 2,),
Array("id_1" => 2,"id_2" => 15,"name" => "test6","type" => "C","ref_1" => 1,"ref_2" => 3,),
Array("id_1" => 5,"id_2" => 22,"name" => "test7","type" => "B","ref_1" => 4,"ref_2" => 9,),
Array("id_1" => 4,"id_2" => 9,"name" => "test8","type" => "C","ref_1" => 1,"ref_2" => 1,),
Array("id_1" => 1,"id_2" => 7,"name" => "test9","type" => "C","ref_1" => 2,"ref_2" => 1,),
Array("id_1" => 5,"id_2" => 20,"name" => "test10","type" => "B","ref_1" => 4,"ref_2" => 9,),
Array("id_1" => 5,"id_2" => 5,"name" => "test11","type" => "B","ref_1" => 4,"ref_2" => 9,),
Array("id_1" => 5,"id_2" => 4,"name" => "test12","type" => "B","ref_1" => 1,"ref_2" => 1,),
);
Два «первичные ключи», которые «ID_1» и «ID_2», сочетание обоих не может быть повторен. На каждую строку можно ссылаться другой, используя «ref_1» и «ref_2», ссылочная строка будет содержать форму «id_1» и «id_2» от рефератора (отца).
Строки типа A не могут быть указаны. Тип B & C может ссылаться на A. Также на B можно ссылаться на C и наоборот. Дерево не всегда является полным, он может иметь только TYPE A и B или TYPE A и C, или просто TYPE A.
Я пытаюсь сделать функцию, которая возвращает таблицу, как это:
| TYPE A NAME | TYPE B NAME | TYPE C NAME |
| ------------------------------------------- |
| test1 | test2 | test5 |
| test1 | test3 | test6 |
| test1 | test7 | test8 |
| test1 | test4 | test9 |
| test1 | test10 | test8 |
| test1 | test11 | test8 |
| test1 | test12 | |
Каждый раз, когда строка ссылается на две (или более) строки, данные являются отпечатками отца и выдает одну строку для каждой ссылки. Если референты типа A 2 типа B и каждый тип B ссылаются на другие 2 типа C, выходная таблица будет иметь 4 строки.
Существует более трех типов, это просто PoC. Я попытался объяснить это как можно более подробно, но это может быть трудно понять. Я знаю, что это может быть связано с рекурсией, но я пробовал последние 8 часов и не мог выполнить эту работу.
PS: Выход может быть массивом тоже.
Если необходима дополнительная информация, пожалуйста, дайте мне знать.