tutorials.de-Buchverschenkaktion 08/2010
+ Auf Thema antworten
  1. #1
    Benutzerbild von tequito
    tequito tequito ist offline Mitglied Silber tequito hat eine blütenweiße Weste
    Registriert seit
    Oct 2006
    Beiträge
    79
    Hallo

    Wie kann man einen Array den man einer rekursiven Funktion übergibt wieder ausgeben?

    Der Array "$structure" sieht so aus:
    PHP-Code:
    Array
    (
      [
    20] => Array
        (
          [
    id] => 20
          
    [name] => Root
          
    [children] => Array
            (
              [
    30] => Array
                (
                  [
    id] => 30
                  
    [name] => Primaten
                  
    [children] => Array
                    (
                      [
    18] => Array
                        (
                          [
    id] => 18
                          
    [name] => Halbaffen
                          
    [children] => Array()
                        )
                      [
    42] => Array
                        (
                          [
    id] => 42
                          
    [name] => Affen
                          
    [children] => Array()
                        )
                    )
                )
            )
        )

    Die Funktion die ich mir geschrieben habe sieht so aus:
    PHP-Code:
    function rekursiv$array )
    {
      foreach( 
    $array as $key => $value )
      {
        if( 
    is_array($value) )
        {
          if( 
    count$value['children'] ) > )
          {
            
    rekursiv$value['children'] );
          }
          else
          {
            unset( 
    $value['children'] );
          }
        }
      }
      return;
    }

    rekursiv$structure );

    print_r($structure); 


    Gedachte hatte ich nun, leere Kinder ("children") zu entfernen und wenn diese nicht leer sind die Funktion noch einmal aufzurufen für die jeweiligen Kinder-Elemente.

    Wieso gibt die Funktion $structure unverändert aus? Wo steckt bei dieser rekursiven Funktion der Fehler?

  2. PHP 5 / MySQL 5 Seminar (22 Stunden Video-Training)

    Preis: früher: 39,95€ - jetzt nur: 7,99€
    Innerhalb Deutschlands versandkostenfrei!

    PHP 5 / MySQL 5 Lernkurs – 22 Stunden Video-Training auf DVD
    - PHP-, MySQL- und PHPMyAdmin-Grundlagen
    - Datenbankprogrammierung, objektorientierte Programmierung
    - Geeignet für Windows XP und Windows Vista


    Hier geht es zum Angebot

    Über 1.000 weitere IT-Bücher zum Sonderpreis lieferbar!


  3. #2
    Benutzerbild von Felix Jacobi
    Felix Jacobi Felix Jacobi ist offline do ut des Felix Jacobi hat die Renommee-Anzeige deaktiviert
    tutorials.de Moderator
    Registriert seit
    Nov 2001
    Ort
    Wuppertal
    Beiträge
    4.965
    Blog-Einträge
    65
    Wenn du eine Variable an eine Funktion übergibst, erstellt diese eine Kopie davon.
    Die Lösung für dein Problem ist einfach: Nutze eine Referenz.

    PHP-Code:
    function rekursiv( &$array )
    {
      foreach( 
    $array as $key => $value )
      {
        if( 
    is_array($value) )
        {
          if( 
    count$value['children'] ) > )
          {
            
    rekursiv$value['children'] );
          }
          else
          {
            unset( 
    $value['children'] );
          }
        }
      }
      return;
    }

    rekursiv$structure );

    print_r($structure); 
    KIDS Kinderbetreuungsdienst
    Xing

    They who can give up essential liberty to obtain a little temporary safety, deserve neither liberty nor safety.
    Benjamin Franklin

  4. #3
    Benutzerbild von tequito
    tequito tequito ist offline Mitglied Silber tequito hat eine blütenweiße Weste
    Registriert seit
    Oct 2006
    Beiträge
    79
    Leider kommt aber auch dabei das Array unverändert in dem print_r() raus.

  5. #4
    Benutzerbild von Felix Jacobi
    Felix Jacobi Felix Jacobi ist offline do ut des Felix Jacobi hat die Renommee-Anzeige deaktiviert
    tutorials.de Moderator
    Registriert seit
    Nov 2001
    Ort
    Wuppertal
    Beiträge
    4.965
    Blog-Einträge
    65
    Du hast recht...

    Habs ein wenig anders gelöst.

    PHP-Code:
    <pre>
    <?php
    $arr 
    = array('20' => array(
                    
    'id' => 20,
                    
    'name' => 'Root',
                    
    'children' => 
                    array(
                        
    'id' => '30',
                        
    'name' => 'Primaten',
                        
    'children' => array( 
                            array(
                                
    'id' => 18,
                                
    'name' => 'Halbaffen',
                                
    'children' => array()
                            ),
                            array(
                                
    'id' => 42,
                                
    'name' => 'Affen',
                                
    'children' => array()
                            )
                        )
                    )
                )
            );

    function 
    rekursiv$array )
    {
      foreach( 
    $array as $key => $value )
      {
        if( 
    is_array($value) )
        {
          if( 
    count$value['children'] ) > )
          {
            
    rekursiv$value['children'] );
          }
          unset( 
    $value['children'] );
        }
        
    $arr[] = $value;
      }
      return 
    $arr;
    }
    $array rekursiv$arr );

    print_r($array);

    ?>
    KIDS Kinderbetreuungsdienst
    Xing

    They who can give up essential liberty to obtain a little temporary safety, deserve neither liberty nor safety.
    Benjamin Franklin

  6. #5
    Registriert seit
    Dec 2002
    Ort
    Trier
    Beiträge
    17.506
    Blog-Einträge
    10
    In mehreren Foren gleichzeitig dieselbe Frage zu stellen ist eigentlich verpönt. Funktion gibt Array nicht zurück - XHTMLforum
    Markus Wulftange

Ähnliche Themen

  1. String wird nicht zurückgegeben
    Von maxn im Forum PHP
    Antworten: 6
    Letzter Beitrag: 25.04.08, 09:31
  2. Problem mit rekursiver Funktion
    Von visiondpc im Forum PHP
    Antworten: 4
    Letzter Beitrag: 09.09.07, 16:09
  3. Parameter wird gelöscht bei rekursiver Funktion
    Von tantebootsy im Forum Javascript & Ajax
    Antworten: 6
    Letzter Beitrag: 19.05.06, 11:32
  4. Antworten: 2
    Letzter Beitrag: 19.08.02, 16:37
  5. Problem mit rekursiver Funktion in ABAP
    Von SirNeo im Forum Sonstige Sprachen
    Antworten: 2
    Letzter Beitrag: 17.01.02, 10:14

Lesezeichen

Lesezeichen