Dickes Problem mit Rekursion

chickenwings

Erfahrenes Mitglied
Hallo,

habe ein Problem mit folgendem rekursiven Code:
Code:
global $data;
$data = array();

function getHierarchie($id,$db){

      $query = $db->query("SELECT vorgesetzter FROM relationen WHERE
      mitarbeiter=$id");
      $arr = $db->record($query);
	
      $data[] = $arr[0];
      if ($arr[0] == 0)
           return;
      else
           getHierarchie($arr[0],$db);			
}


getHierarchie($id,$db);

foreach($data as $values){
     print "id: {$values} <br>";
}

das Array $data scheint leer zu sein, da nichts angezeigt wird. Daten sind in der Tabelle aber definitiv vorhanden. Schätze es gibt ein Problem mit temporären Zwischenspeichern aus der Funktion heraus. Jemand eine Idee wie man das lösen kann?

Gruss
chickenwings
 
Hallo,
so vielleicht?
PHP:
$data = array();

function getHierarchie($id,$db){
    global $data;

      $query = $db->query("SELECT vorgesetzter FROM relationen WHERE
      mitarbeiter=$id");
      $arr = $db->record($query);
    
      $data[] = $arr[0];
      if ($arr[0] == 0)
           return $data;
      else
           getHierarchie($arr[0],$db);            
}


$data = getHierarchie($id,$db);

foreach($data as $values){
     print "id: {$values} <br>";
}

mfg
forsterm
 
Zuletzt bearbeitet:
hmm... nee leider dasselbe Ergebnis.

print count($data); liefert 0.
Die Rekursion funktioniert aber auf alle Fälle, da ich die Daten in eine Result Tabelle schreiben kann. Aber es kann nicht sein, daß ein DB-Insert machn muss, um an so ein olles Array zu kommen.

arrrggghhh ...... ;-)

chickenwings
 
ich habs:

Code:
$data = array();
	
	function getHierarchie($id,$db){
		global $data;

		$query = $db->query("SELECT vorgesetzter FROM relationen WHERE mitarbeiter=$id");
		$arr = $db->record($query);
	
		$data[] = $arr[0];

		if ($arr[0] == 0)
			return;
		else
			$counter++;
		$insert = $db->query("INSERT INTO result (id) VALUES ('$arr[0]')");
		getHierarchie($arr[0],$db);
	}

Das Problem was, daß ich nichts zurückgeben darf. Das Array als solches ist ja schon als global definiert. Also kann ich es auch in der Foreach-Schleife auslesen.

Danke und Gruss
chickenwings
 
Edit: Nagut, das hat sich dann wohl erledigt ^^ Viel Spaß beim weiteren Schöpferischen. ;)

alt:---------------------------------------------------------------------------------------------------------------------------------------
Also ich hatte auch mal irgendwann ein ähnliches Problem und mir half die gute alte OOP weiter.

Keine Ahnung ob dieser Code funktioniert, probier einfach selber ein wenig herum :confused:

PHP:
<?php

class baum {

	var $data = array();	// Daten-Array
	
	function _get($id,$db)
	{
		$query = $db->query("SELECT vorgesetzter FROM relationen WHERE mitarbeiter=$id");	// Abfrage
		$arr = $db->record($query);		// Ergebnis in $arr zwischenspeichern
		
		$data[] = $arr[0];	// dem Datenarray wird der erste Datansatz zugewiesen
		if(empty($arr[0]))	// wenn der erste Datensatz leer ist
		{
		   return;			// dann zurück
		}
		else
		{
			$this->_get($arr[0],$db);		//ansonsten den nächsten Datensatz holen	
		}
	}

}

$hierarchie	=	new baum();
$hierarchie->_get($id,$db);

foreach($data as $ids => $values)
{
	print("id: {".$ids."} value: {".$values."} <br />");
}

?>
 
Zuletzt bearbeitet:
Zurück