Zu den Aufzeichnungen der tutorials.de-Live-Workshops
ERLEDIGT
NEIN
ANTWORTEN
4
ZUGRIFFE
1330
EMPFEHLEN
  • An Twitter übertragen
  • An Facebook übertragen
AUF DIESES THEMA
ANTWORTEN
  1. #1
    Avatar von tequito
    tequito tequito ist offline Mitglied Silber
    Registriert seit
    Oct 2006
    Beiträge
    88
    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. #2
    Avatar von Flex
    Flex Flex ist offline (aka Felix Jacobi)
    tutorials.de Moderator
    Registriert seit
    Nov 2001
    Ort
    Wuppertal
    Beiträge
    5.295
    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

    "When you play the game of thrones, you win or you die. There is no middle ground."
    by Cersei Lannister in "A Game Of Thrones"

  3. #3
    Avatar von tequito
    tequito tequito ist offline Mitglied Silber
    Registriert seit
    Oct 2006
    Beiträge
    88
    Leider kommt aber auch dabei das Array unverändert in dem print_r() raus.
     

  4. #4
    Avatar von Flex
    Flex Flex ist offline (aka Felix Jacobi)
    tutorials.de Moderator
    Registriert seit
    Nov 2001
    Ort
    Wuppertal
    Beiträge
    5.295
    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

    "When you play the game of thrones, you win or you die. There is no middle ground."
    by Cersei Lannister in "A Game Of Thrones"

  5. #5
    Registriert seit
    Dec 2002
    Ort
    Trier
    Beiträge
    17.502
    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. Parameter wird gelöscht bei rekursiver Funktion
    Von tantebootsy im Forum Javascript & Ajax
    Antworten: 6
    Letzter Beitrag: 19.05.06, 11:32
  3. Antworten: 1
    Letzter Beitrag: 12.04.06, 22:36
  4. Antworten: 6
    Letzter Beitrag: 26.12.05, 23:11
  5. Antworten: 2
    Letzter Beitrag: 19.08.02, 16:37