Rekursion gibt nur ersten Wert zurück

NTDY

Erfahrenes Mitglied
Ich dachte eigentlich, dass PHP 5 automatisch referenziert. Daher bin ich über das Ergebnis dieser rekursiven Funktion irritiert:

PHP:
<?php
$data[1]['pid']=0;
$data[1]['url']='STARTSEITE';
$data[2]['pid']=1;
$data[2]['url']='news';
$data[6]['pid']=2;
$data[6]['url']='2006';
$id=6;
$ergebnis = find_parent($id,$data);
print_r($ergebnis);

function find_parent($id,$array){
	$menupath = array();
	if($id==1){
		$menupath[$id] = $array[$id]['url'];
	}else{
		$menupath[$id] = $array[$id]['url'];
		find_parent($array[$id]['pid'],$array);
	}
	return $menupath;
}
?>
Ausgabe:
Code:
    [6] => 2006

Es sollte doch aber das herauskommen:
Code:
    [6] => 2006
    [2] => news
    [1] => STARTSEITE

Hat jemand eine Idee dazu
 
Zuletzt bearbeitet:
Liegt daran, dass du direkt nach der ID 6 suchst, hab dir das mal a wenig geändert:) Schleifen wirken wunder:)

PHP:
<?php
$data[1]['pid']=0;
$data[1]['url']='STARTSEITE';
$data[2]['pid']=1;
$data[2]['url']='news';
$data[3]['pid']=2;
$data[3]['url']='2006';

//Anzahl der Eintäge
$anz="3";

//Werte durchlaufen
for($id = 1; $id <= $anz; $id++)
{
	$ergebnis = find_parent($id,$data);
	print_r($ergebnis);
}

function find_parent($id,$array){
    $menupath = array();
    if($id==1){
        $menupath[$id] = $array[$id]['url'];
    }else{
        $menupath[$id] = $array[$id]['url'];
        find_parent($array[$id]['pid'],$array);
    }
    return $menupath;
}
?>
 
Muss man ja nicht machen. Ich kann ja auch eine Referenz auf menupath legen und die Variable immer mitschleifen, aber ich frage mich wieso ich referenzieren muss, wenn ich doch in PHP5 darauf verzichten können sollte:
PHP:
<?php
$data[1]['pid']=0;
$data[1]['url']='STARTSEITE';
$data[2]['pid']=1;
$data[2]['url']='news-and-updates';
$data[6]['pid']=2;
$data[6]['url']='news-2006';
$id=6;
$ergebnis = find_parent($id,$data,$result);

echo "<pre>";
print_r($ergebnis);
echo "</pre>";

function find_parent($id,$array,&$menupath){
	if($id==1){
		$menupath[$id] = $array[$id]['url'];
	}else{
		$menupath[$id] = $array[$id]['url'];
		find_parent($array[$id]['pid'],$array,$menupath);
	}
	return $menupath;
}
?>
 
Hi,

PHP:
<?php
$data[1]['pid']=0;
$data[1]['url']='STARTSEITE';
$data[2]['pid']=1;
$data[2]['url']='news';
$data[6]['pid']=2;
$data[6]['url']='2006';
$id=6;
$ergebnis = find_parent($id,$data);
print_r($ergebnis);

function find_parent($id,$array){
	$menupath = array();
	if($id==1){
		$menupath[$id] = $array[$id]['url'];
	}else{
		$menupath[$id] = $array[$id]['url'];
		find_parent($array[$id]['pid'],$array);
	}
	return $menupath;
}
?>

Du verwirfst den Rückgabewert von "find_parent" der rekursiven Aufrufe.

Ein array_merge sollte das Problem beheben.
PHP:
function find_parent($id,$array){
	$menupath = array();
	if($id==1){
		$menupath[$id] = $array[$id]['url'];
	}else{
		$menupath[$id] = $array[$id]['url'];
		$menupath = array_merge($menupath, find_parent($array[$id]['pid'],$array));
	}
	return $menupath;
}

Gruß Kyoya Stefan
 
Zurück