php.de

Zurück   php.de > Webentwicklung > PHP-Fortgeschrittene

PHP-Fortgeschrittene Arbeiten mit PHP ohne Einschränkungen

Antwort
 
LinkBack Themen-Optionen Thema bewerten
Alt 06.10.2005, 14:01   #1 (permalink)
Gast
 
Beiträge: n/a
Standard [Erledigt] Rückgabewert einer rekrusiven Funktion

Hi Leute !

hab da mal wieder ein kleines Problem wo ich sehr gut euer Wissen gebrauchen kann...

Erstmal eine kleine Beschreibung:

Ich habe eine Tabelle in der eine Menüstrktur abgelegt ist. Jeder Punkt kann beliebig viele Unterpunkte haben, jeder unterpunkt kann wieder beliebige Unterpunkte haben usw.

Die Tabelle sieht so aus:

uid | pid | menuname


uid = unique identifier
pid = parent_id

Ich habe mir eine Funktion geschrieben, der ich eine uid übergeben kann, und dir mir alle unterpunkte zu dieser Funktion ausgeibt.
Das ist auch alles wunderbar, num zu meinem Problem:
Im moment gebe ich in der Funktion selber die Unterpunkte aus - Das ist natürlich nicht so schön, viel lieber wäre es mir wenn die Funktion mir einen Array zurückliefern würde.
Und genau da ist mein Problem: Dadurch das sich die Funktion immer wieder selber aufruft, gehen meine Werte immer wieder verloren. Die Lösung wäre es, der Funktion selber den Array mit den aktuellen Werten zu übergeben, und die neuen Werte diesen anzufügen. Und genau hieran scheitere ich :/

Hier die Funktion:

Code:
<?	function checkMenuePoints($pid, $rekursiv = 1)
	{
		# $pid = ParentID eines Menüounktes, zu dem die Unterpunkte ausgegeben werden sollen
		# $rekursiv = 0 oder 1; legt fest ob die Unterpunkte rekursiv ausgegeben werden sollen, oder ob nur die direkten
		# Unterpunkte angezeit werden
		
		$SQL = "SELECT uid, pid, name FROM tbl_faqbaum WHERE pid = '$pid';";
		$rssubmenue = mysql_query($SQL);
		$margin = $marg;
	
		if (mysql_num_rows($rssubmenue) > 0) // Unterpunkte vorhanden, Unterpunkt ausgeben und prüfen ob es weitere Unterpunkte gibt
		{ 
		$SQL2 = "SELECT UID FROM tbl_faqbaum WHERE pid='$pid'";
		$rsuid = mysql_fetch_object(mysql_query($SQL2));
		#$uid = $rsuid->uid;

			while ($submenue = mysql_fetch_object($rssubmenue)) 
			{ ?>
				
				<? echo stripslashes($submenue->name) ?>
				


				<? 

				if ($rekursiv == 1)
				{
					checkMenuePoints($submenue->uid,$rekursiv);	
				}

			}
		}
	}
?>
Das ganze sollte ohne globale variablen funzen...

ich hoffe ihr könnt mir helfen,
grüße Ben
  Mit Zitat antworten
Sponsor Mitteilung
PHP Code Flüsterer

Registriert seit: 21.08.2005
Beiträge: 4682
PHP-Kenntnisse:
Fortgeschritten

Alt 06.10.2005, 14:03   #2 (permalink)
Gast
 
Beiträge: n/a
Standard

Zitat:
if ($rekursiv == 1)
{
checkMenuePoints($submenue->uid, $margin, $rekursiv, $test);
}
Hier fängst Du den Rückgabewert garnicht auf. Schade, Du könntest ihn gut nutzen.
  Mit Zitat antworten
Alt 06.10.2005, 14:08   #3 (permalink)
Gast
 
Beiträge: n/a
Standard

Code:
function yourfunc($data) {
    if (is_array($data)) {
        foreach ($data as $key => $val) {
            $return[$key] = yourfunc($val);
        }
        return ($return);
    }
    return $data;
}

aufbau eines "Loop"

die umsetzung in dein script sollte wohl nicht mehr so schwer sein
  Mit Zitat antworten
Alt 06.10.2005, 14:41   #4 (permalink)
Gast
 
Beiträge: n/a
Standard

jo Leute,

danke schomal für eure Antworten, ich packs leider trotzdem nicht so ganz:

hier mein aktueller versuch (is zwar noch ohne Array, aber ist ja erstmal egal)

Code:
<?	function checkMenuePoints($pid, $rekursiv = 1, $data = "")
	{			
		$SQL = "SELECT uid, pid, name FROM tbl_faqbaum WHERE pid = '$pid';";
		$rssubmenue = mysql_query($SQL);
	
		if (mysql_num_rows($rssubmenue) > 0) // Unterpunkte vorhanden, Unterpunkt ausgeben und prüfen ob es weitere Unterpunkte gibt
		{ 

			$SQL2 = "SELECT uid FROM tbl_faqbaum WHERE pid='$pid'";
			$rsuid = mysql_fetch_object(mysql_query($SQL2));

			while ($submenue = mysql_fetch_object($rssubmenue)) 
			{ 
                                // Übergebener Var. die neuen Werte hinzufügen
				$data = $data.",".$submenue->uid;

				if ($rekursiv == 1)
				{
				// der Funtion die bisher gesammelten Werte übergeben
					checkMenuePoints($submenue->uid, $rekursiv, $data);
				}
			}
		}
		return($data); // rückgabe der gesammelten werte
	}
?>
Aber irgendwo hängt es mit der Übergabe der Werte. ich blick nur leider nicht wo ^^
Vielen Dank,
greets ben
  Mit Zitat antworten
Alt 06.10.2005, 14:58   #5 (permalink)
Gast
 
Beiträge: n/a
Standard

Zitat:
checkMenuePoints($submenue->uid, $rekursiv, $data);
immer noch keine Verwertung des Rückgabewertes,
  Mit Zitat antworten
Alt 06.10.2005, 15:07   #6 (permalink)
Gast
 
Beiträge: n/a
Standard

Hi,

sry Bruchpilot, ich schnall nich so ganz wie du das meinst.

Ich verwende zwar nich den rückgabewert, aber ich übergebe der Funktion doch die Variable die eigentlich die bisher "gesammelten" Werte enthält.

Zeige mir doch bitte wie genau die die Verwertung des Rückgabewertes meinst, ich komm echt nich drauf

thxalot,
greets ben
  Mit Zitat antworten
Alt 06.10.2005, 16:21   #7 (permalink)
Gast
 
Beiträge: n/a
Standard

hehe .. jaja diese Ben's ... mfg iss'n Joke

$reueckgabewert=checkMenuePoints($submenue->uid, $rekursiv, $data);
  Mit Zitat antworten
Alt 06.10.2005, 18:44   #8 (permalink)
Waq
Erfahrener Benutzer
 
Registriert seit: 15.08.2004
Beiträge: 2.473
Waq
Standard

Zitat:
Zitat von BennySHS
Ich verwende zwar nich den rückgabewert, aber ich übergebe der Funktion doch die Variable die eigentlich die bisher "gesammelten" Werte enthält.
Und die Funktion hängt da was dran und wirft das ganze dann weg, weil Du es nirgendwohin übergibst.
Variante a) ist, die Return-Werte rekursiv anzunehmen und zusammenzubauen, oder
b) aus
function checkMenuePoints($pid, $rekursiv = 1, $data = "")
sowas zu machen:
function checkMenuePoints($pid, $rekursiv = 1, &$data)
damit $data überall die gleiche Variable ist (als Referenz)

Der erste Aufruf von checkMenuePoints sollte dann aber auch wirklich ne Variable für $data übergeben, sonst meckern v.a. neuere PHP-Versionen, wenns keine Variable gibt, auf die die Referenz zeigen soll.
__________________
mod = master of disaster
Waq ist offline   Mit Zitat antworten
Antwort


Themen-Optionen
Thema bewerten
Thema bewerten:

Forumregeln
Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are an
Gehe zu

Ähnliche Themen
Thema Autor Forum Antworten Letzter Beitrag
JS: Einführung - Javascript im Schichtenmodell nikosch Tutorials 4 11.04.2009 17:06
Rekursive Funktion bricht ab... duras666 PHP Tipps 2008 9 28.04.2008 11:36
gpc_quotes funktion: verbesserungsvorschläge? Promaetheus PHP Tipps 2007 10 12.08.2007 19:29
Komplexe Funktion: +Übersichtlichkeit, -Performance Jacks Rache PHP Tipps 2006 3 07.06.2006 14:22
aus einer funktion auf funktion anderer klasse zugreifen seejay PHP Tipps 2006 3 05.01.2006 10:37
PHP-GTK Tutorial Beitragsarchiv 9 02.11.2005 21:07
(schnellere) Funktion zum Zusammenfassen von CSS PHP-Fortgeschrittene 21 08.08.2005 16:47
In einer Funktion auf eine Funktion der Klasse zugreifen phpbeginner PHP Tipps 2005-2 2 28.07.2005 00:30
Funktion in einer Funktion aufrufen? PHP Tipps 2005-2 11 14.06.2005 15:14
[Erledigt] Array-Übergabe in Funktion PHP Tipps 2005 1 08.05.2005 21:05
[Erledigt] Wie kann ich beliebig viele Werte an eine Funktion übergeben PHP Tipps 2005 11 25.01.2005 10:44
Funktion in funktion nicht möglich? PHP-Fortgeschrittene 4 28.11.2004 00:14
sql anfrage in funktion greenrover PHP Tipps 2004-2 4 10.11.2004 14:58
[Erledigt] sql syntax error in funktion, kann aber nix finden :( PHP Tipps 2004 10 20.07.2004 19:19
Referenz auf Funktion übergeben PHP-Fortgeschrittene 7 20.07.2004 09:51

Besucher kamen über folgende Suchanfragen bei Google auf diese Seite
mehrere rückgabewerte einer funktion ausgeben php, rückgabewert bei rekursionen, function sql werte übergeben php, php syntax check rekursiv, \rekursionsgleichung für den rückgabewert\, rückgabe function, php funktionen and funktion hängen, uid pid, php rekursive funktion return, rekursion rückgabewerte, funktion liefert keinen rückgabewert return php, funktion rückgabe referenz php, rückgabewert funktion anzeigen php, sql function rückgabe array, php rückgabewert funktion ohne var verarbeiten, rekursion menü sql, rekursion rückgabe, return bei rekursiver funktion, submenü sql, funktion php sql zurückgeben

Alle Zeitangaben in WEZ +1. Es ist jetzt 02:25 Uhr.




Powered by vBulletin® Version 3.7.2 (Deutsch)
Copyright ©2000 - 2010, Jelsoft Enterprises Ltd.
Search Engine Optimization by vBSEO 3.2.0
Aprilia-Forum, Aquaristik-Forum, Liebeskummer-Forum, Zierfisch-Forum, Geizkragen-Forum

Creative Commons License
Dieser Inhalt ist unter einer Creative Commons-Lizenz lizenziert.