У меня в базе данных есть люди по отношению к родителям, и мне нужно создать рекурсивную функцию, которая возвращает массив с генеалогическим деревом. Пример базы данных:
NUMBER;NAME;FATHER;MOTHER
001;Name1;002;005
002;Name2;007;018
003;Name3;018;025
005;Name5;006;019
023;Name23;019;045
018;Name18;062;097
007;Name7;;-
...
Я подготовил две функции - одну для человека и вторую рекурсивную для поиска предков.
Мне нужен этот результат:
$out[0][0] // first person
$out[1][0] // mother of first person
$out[1][1] // father of first person
$out[2][0] // grandmother of first person (mother side)
$out[2][1] // grandfather of first person (mother side)
$out[2][2] // grandmother of first person (father side)
$out[2][3] // grandmother of first person (father side)
...
следующее поколение имеет 8 предметов, следующие 16 предметов, ... Максимум - 6 поколений назад.
Я подготовил две функции - одну для человека и вторую рекурсивную для построения дерева. Во второй функции
define("MAX_GEN",5);
function detail($number) {
$d = mysql_query("select * from table where number = '$number'");
if(mysql_num_rows($d) == 0) {
$p[name] = "N/A";
$p[number] = "N/A";
$p[m_number] = "N/A";
$p[f_number] = "N/A";
}
else $p = mysql_fetch_assoc($d);
return $p;
}
function gen($number, $generation = 0, $out) {
if ($generation >= MAX_GEN) {
return false;
}
$record = detail($number);
if ($generation == 0) $out[0][] = $record; // first man
$generation++; // next generation
if (!$out[$generation] && ($generation != MAX_GEN)) $out[$generation] = array();
$x_mother = gen($record[m_number], $generation ); // continue with mother
$x_father = gen($record[f_number], $generation ); // continue with father
if ($out[$generation]) {
$out[$generation][] = $x_mother;
$out[$generation][] = $x_father;
}
return $out;
}
Но во второй функции есть проблема - я не знаю, как передать массив с результатами следующему и следующему поколению. Он по-прежнему возвращает один элемент или (после нескольких попыток) возвращает массив, который я хочу, но со вставленными массивами между поколениями, и результат не может быть использован. Кто-нибудь может мне помочь, пожалуйста?
Пример результата, который я получу здесь: http://www.foxterrier.cz/_TM_importy/example.php