tutorials.de Buch-Aktion 05/2012
ERLEDIGT
JA
ANTWORTEN
4
ZUGRIFFE
228
EMPFEHLEN
  • An Twitter übertragen
  • An Facebook übertragen
AUF DIESES THEMA
ANTWORTEN
  1. #1
    NTDY NTDY ist offline Mitglied Gold
    Registriert seit
    Mar 2004
    Ort
    no-comment
    Beiträge
    136
    Ich dachte eigentlich, dass PHP 5 automatisch referenziert. Daher bin ich über das Ergebnis dieser rekursiven Funktion irritiert:

    PHP-Code:
    <?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 :
    1
    
        [6] => 2006

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

    Hat jemand eine Idee dazu
    Geändert von NTDY (08.12.11 um 16:12 Uhr)
     

  2. #2
    Divo1984 Divo1984 ist offline Mitglied Gold
    Registriert seit
    Aug 2010
    Beiträge
    128
    Liegt daran, dass du direkt nach der ID 6 suchst, hab dir das mal a wenig geändert Schleifen wirken wunder

    PHP-Code:
    <?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;
    }
    ?>
     

  3. #3
    NTDY NTDY ist offline Mitglied Gold
    Registriert seit
    Mar 2004
    Ort
    no-comment
    Beiträge
    136
    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-Code:
    <?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;
    }
    ?>
     

  4. #4
    Kyôya Kyôya ist offline Mitglied Silber
    Registriert seit
    Nov 2011
    Ort
    Würzburg
    Beiträge
    62
    Hi,

    PHP-Code:
    <?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.
    Code php:
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    
    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
     
    Oracle Certified MySQL 5 Professional Developer
    Zend Certified PHP 5.3 Engineer

    Vorträge, Webinare, etc im Mayflower - Blog

  5. #5
    NTDY NTDY ist offline Mitglied Gold
    Registriert seit
    Mar 2004
    Ort
    no-comment
    Beiträge
    136
    Mh. Okay. Sind doch schöne Varianten hier geworden
     

Ähnliche Themen

  1. Antworten: 1
    Letzter Beitrag: 30.09.11, 21:22
  2. Antworten: 10
    Letzter Beitrag: 30.07.11, 18:55
  3. Antworten: 2
    Letzter Beitrag: 01.02.09, 14:22
  4. Antworten: 1
    Letzter Beitrag: 20.03.08, 17:56
  5. MyVBQL: RecordCount gibt falschen Wert zurück
    Von robbatse im Forum .NET Archiv
    Antworten: 1
    Letzter Beitrag: 06.07.04, 10:01

Stichworte