Hi
Das Array locs lese ich aus einer Datenbank aus. Aufmerksam gelesen,
steht da z. B. drin, dass WestEurope, Austria, Belgium, Iberia, Spain, Portugal, UknIreland, UK, Ireland zu einem Familienzweig gehören.
Nun möchte ich bei Vorgabe irgendeiner Location, den ganzen Rattenschwanz von Kindern und Kindeskindern in ein Ergebnis-Array schreiben. Z. B. hängt Iberia an WestEurope dran und Spain, Portugal wiederum an Iberia.
Das scheint mit mit anhängendem Code gelungen zu sein. Da ich allerdings ein absoluter Rekursionsidiot bin würde ich die Vollblutprogrammierer unter Euch fragen wollen, ob die Lösung Macken hat oder viel eleganter geht.
Das Array locs lese ich aus einer Datenbank aus. Aufmerksam gelesen,
steht da z. B. drin, dass WestEurope, Austria, Belgium, Iberia, Spain, Portugal, UknIreland, UK, Ireland zu einem Familienzweig gehören.
Nun möchte ich bei Vorgabe irgendeiner Location, den ganzen Rattenschwanz von Kindern und Kindeskindern in ein Ergebnis-Array schreiben. Z. B. hängt Iberia an WestEurope dran und Spain, Portugal wiederum an Iberia.
Das scheint mit mit anhängendem Code gelungen zu sein. Da ich allerdings ein absoluter Rekursionsidiot bin würde ich die Vollblutprogrammierer unter Euch fragen wollen, ob die Lösung Macken hat oder viel eleganter geht.
PHP-Code:
$locs[1]['name'] = "Europe";
$locs[1]['parent'] = 0;
$locs[2]['name'] = "WestEurope";
$locs[2]['parent'] = 1;
$locs[3]['name'] = "EastEurope";
$locs[3]['parent'] = 1;
$locs[4]['name'] = "Austria";
$locs[4]['parent'] = 2;
$locs[5]['name'] = "Poland";
$locs[5]['parent'] = 3;
$locs[6]['name'] = "Belgium";
$locs[6]['parent'] = 2;
$locs[7]['name'] = "Croatia";
$locs[7]['parent'] = 3;
$locs[8]['name'] = "Iberia";
$locs[8]['parent'] = 2;
$locs[9]['name'] = "Spain";
$locs[9]['parent'] = 8;
$locs[10]['name'] = "Portugal";
$locs[10]['parent'] = 8;
$locs[11]['name'] = "UKnIrland";
$locs[11]['parent'] = 2;
$locs[12]['name'] = "UK";
$locs[12]['parent'] = 11;
$locs[13]['name'] = "Ireland";
$locs[13]['parent'] = 11;
$parents = array();
//Hat eine Location einen parent-Wert > 0, dann gehört der parent-Wert ins Array aller Parents
foreach ($locs as $key => $loc) {
if ($loc['parent'] > 0) {
$parents[] = $loc['parent'];
}
}
//Entferne Mehrfachnennungen
$parents = array_unique($parents);
//Ein globales Ergebnis-Array
$result_array = array();
function get_children_incl_parent($id,$locations,$parents){
global $result_array;
//Eltern sollen im Ergebnis enthalten sein
$result_array[] = $id;
foreach($locations as $key => $loc) {
if ($loc['parent'] == $id) {
//Prüfe, ob erfasstes Kind selber Kinder hat und erfasse diese auch. Rekursion ?!
if (in_array($key,$parents)) {
get_children_incl_parent($key,$locations,$parents);
} else {
//Ist Location direkt Kind => ins result_array schreiben
$result_array[] = $key;
}
}
}
}
get_children_incl_parent(2,$locs,$parents);
print_r($result_array);
Kommentar