php.de

Zurück   php.de > Webentwicklung > PHP Einsteiger > PHP Tipps 2007

 
 
LinkBack Themen-Optionen Thema bewerten
Alt 18.02.2007, 16:02  
Erfahrener Benutzer
 
Registriert seit: 16.02.2006
Beiträge: 303
tinchen
Standard Rekursive Funktion

Kann mir mal jemand erklären was ich falsch mache?
Ist innerhalb eines Frameworks, so dass ich mit einer Database Klasse arbeiten kann, aber das ist ja nur nebensächlich. Warum wird die $id
in machWas nicht mehr angezeigt wenn $menu->parent in getFirstId nicht 0 ist? Versteh ich nicht. Hat das etwas damit zu tun, dass der ursprünglich Funktionsaufruf in machWas dann hinfällig ist? Und wie bekommt man den Wert dann zurück?

PHP-Code:
function machWas $iItem ) {

     
$id getFirstId($iItem);
     echo 
$id;
}

function 
getFirstId$id ) {

   global 
$database;
   
$menu NULL;

   
$query "SELECT id, parent FROM menu WHERE...";
   
$database->setQuery($query);
   
$database->loadObject$menu );
   
   if(
$menu->parent!=0) {
       
getFirstId$menu->parent );   
   } else {
       return 
$menu->id;
   }

Grüße
Tine
tinchen ist offline  
Sponsor Mitteilung
PHP Code Flüsterer

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

Alt 18.02.2007, 16:04  
Erfahrener Benutzer
 
Registriert seit: 18.09.2003
Beiträge: 13.598
PHP-Kenntnisse:
Fortgeschritten
imported_Ben ist zur Zeit noch ein unbeschriebenes Blatt
Standard

Ja, was ist $menu->id und wo wird $id verwendet?

Ich würd mal ein paar Testausgaben einbauen.
imported_Ben ist offline  
Alt 18.02.2007, 16:11  
Erfahrener Benutzer
 
Registriert seit: 16.02.2006
Beiträge: 303
tinchen
Standard

Hab ich schon, ich kürze den Code hier immer. Es geht doch auch, wenn $menu->parent im ersten Versuch gleich 0 ist. Soll die Funktion rekursiv durchlaufen werden, wird kein Wert mehr zurückgegeben, obwohl bei

echo $menu->id //output 2
return $menu->id;

ausgebenen wird. In machWas kommt aber nichts an, dort ist $id = empty
tinchen ist offline  
Alt 18.02.2007, 17:18  
Erfahrener Benutzer
 
Registriert seit: 21.05.2008
Beiträge: 9.937
Zergling-new wird schon bald berühmt werden
Standard

Hallo,
deine Funktion hat nicht konsequent den gleichen Rückgabewert.

Einmal gibt sie einen Wert per return zurück, ein anderes mal void (also nichts).

Zitat:
PHP-Code:
<?php
   
if($menu->parent!=0) {
       
getFirstId$menu->parent );   
   } else {
       return 
$menu->id;
   }
?>
Das ist nicht konsequent. Wenn man hier in den if-Block gelangt, verschwindet das Ergebnis im Nirvana.
Zergling-new ist offline  
Alt 18.02.2007, 18:43  
Erfahrener Benutzer
 
Registriert seit: 16.02.2006
Beiträge: 303
tinchen
Standard

Kannst du mir da mal auf die Spünge helfen wie man das konsequent macht?
In einem Array sammeln oder so etwas?

Gruß
Tine
tinchen ist offline  
Alt 18.02.2007, 18:45  
Moderator und Wett-König
 
Benutzerbild von dr.e.
 
Registriert seit: 21.05.2008
Beiträge: 3.657
PHP-Kenntnisse:
Fortgeschritten
dr.e. ist ein Lichtblickdr.e. ist ein Lichtblickdr.e. ist ein Lichtblickdr.e. ist ein Lichtblickdr.e. ist ein Lichtblickdr.e. ist ein Lichtblick
dr.e. eine Nachricht über Skype™ schicken
Standard

Hallo tinchen,

naja, vor

getFirstId( $menu->parent );

fehlt einfach ein "return".
__________________
Viele Grüße,
Dr.E.

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
1. Think about software design before you start to write code!
2. Discuss and review it together with experts!
3. Choose good tools (-> Adventure PHP Framework (APF))!
4. Write clean and reusable software only!
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
dr.e. ist offline  
Alt 18.02.2007, 19:49  
Erfahrener Benutzer
 
Registriert seit: 16.02.2006
Beiträge: 303
tinchen
Standard

Ach so einfach ist das, ich dache man ruft die gleiche Funktion einfach noch einmal auf.
Wohl mal wieder ein Fall von ... na lassen wir das.

Grüße
Tine
tinchen ist offline  
Alt 18.02.2007, 19:54  
Erfahrener Benutzer
 
Registriert seit: 21.05.2008
Beiträge: 9.937
Zergling-new wird schon bald berühmt werden
Standard

Ja, aber du musst ja den Rückgabewert trotzdem verarbeiten.
Zergling-new ist offline  
 


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 funktioniert lokal, aber nicht remote? Anotherone PHP-Fortgeschrittene 1 21.06.2008 08:11
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
Array in rekursiver Funktion auslesen Gumfuzi PHP Tipps 2007 17 15.11.2005 12:01
PHP-GTK Tutorial Beitragsarchiv 9 02.11.2005 21:07
Rückgabewert einer rekrusiven Funktion PHP-Fortgeschrittene 7 06.10.2005 18:44
(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] Wie kann ich beliebig viele Werte an eine Funktion übergeben PHP Tipps 2005 11 25.01.2005 10:44
Hilfe - Rekursive Funktion PHP Tipps 2005 5 10.01.2005 22:19
Rekursive Funktion ... finde fehler nicht ... PHP-Fortgeschrittene 1 27.09.2004 03:44
[Erledigt] sql syntax error in funktion, kann aber nix finden :( PHP Tipps 2004 10 20.07.2004 19:19
Rekursive Funktion tut nicht richtig??? PHP-Fortgeschrittene 8 09.07.2004 15:39

Besucher kamen über folgende Suchanfragen bei Google auf diese Seite
rekursive funktion php, php rekursive funktion array durchlaufen

Alle Zeitangaben in WEZ +2. Es ist jetzt 15:44 Uhr.




Powered by vBulletin® Version 3.7.2 (Deutsch)
Copyright ©2000 - 2012, 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.