Probleme bei foreach in einer Rekursiven Funktion.

Collapse
X
 
  • Filter
  • Time
  • Show
Clear All
new posts

  • Probleme bei foreach in einer Rekursiven Funktion.

    Hallo,

    ich versuche gerade einen Verzeichnissbaum anhand eines Array aufzubauen.
    Ich habe eine ID, eine pid (parent ID) und einen Namen. Wie der Array aussieht zeige ich am Ende des Posts weil es etwas länger ist. Die parent ID enthält die ID des Überelement.

    hier ist meine Funktion:

    PHP Code:
    function tree($id,$platzhalter){
        foreach (
    $info['channel'] as $key => $var) {
            if(
    $var['pid'] == $id){
                echo 
    $platzhalter.$var['name'].'<br />';
            }
            
    get_tree($var['id'],$platzhalter." ");
        }

    wenn ich nun tree(0,""); aufrufe, bekomme ich den Fehler:
    Warning: Invalid argument supplied for foreach() in /var/www/vhosts/gilligans-island.de/httpdocs/ts3web/ts3view.php on line 5
    Zeile 5 ist:
    PHP Code:
    foreach ($info['channel'] as $key => $var) { 

    print_r($info['channel']) ergibt folgendes:

    Code:
    Array
    (
        [0] => Array
            (
                [id] => 2
                [pid] => 0
                [name] => Admins\s@\sWork
            )
    
        [1] => Array
            (
                [id] => 23
                [pid] => 2
                [name] => 3
            )
    
        [2] => Array
            (
                [id] => 24
                [pid] => 23
                [name] => 4
            )
    
        [3] => Array
            (
                [id] => 28
                [pid] => 24
                [name] => 5
            )
    
        [4] => Array
            (
                [id] => 27
                [pid] => 23
                [name] => 6
            )
    
        [5] => Array
            (
                [id] => 25
                [pid] => 2
                [name] => 2
            )
    
        [6] => Array
            (
                [id] => 26
                [pid] => 2
                [name] => 7
            )
    
        [7] => Array
            (
                [id] => 1
                [pid] => 0
                [name] => GiZ\sLobby
            )
    
        [8] => Array
            (
                [id] => 4
                [pid] => 0
                [name] => Call\sof\sDuty\s4
            )
    
        [9] => Array
            (
                [id] => 22
                [pid] => 0
                [name] => WAR\s\/\sClanmatch
            )
    
    )

  • #2
    Originally posted by Laire View Post
    print_r($info['channel']) ergibt folgendes:
    Ausserhalb der Funktion, oder innerhalb?

    PHP: Variable scope - Manual
    I don't believe in rebirth. Actually, I never did in my whole lives.

    Comment


    • #3
      den ersten Fehler habe ich gefunden, muss natürlich die $info mit übergeben, habe jetzt folgendes:

      PHP Code:
      function tree($id,$platzhalter,$info){
          foreach (
      $info['channel'] as $key => $var) {
              if(
      $var['pid'] == $id){
                  echo 
      $platzhalter.$var['name'].'<br />';
              }
              
      tree($var['id'],$platzhalter." ",$info);
          }
      }
      tree(0,"",$info); 
      Jetzt bekomme ich:
      Fatal error: Allowed memory size of 33554432 bytes exhausted (tried to allocate 6843 bytes) in /var/www/vhosts/gilligans-island.de/httpdocs/ts3web/ts3view.php on line 9

      macht ein so kleiner Array soviel Speicher dicht oder habe ich eine Endlosschleife drin?

      Comment


      • #4
        Wie groß oder klein das Array ist, weiß ich zwar nicht, aber was macht dein Skript denn sonst noch so? Evtl. ist das Array ja nur der Tropfen, der das Fass zum überlaufen brachte.
        [COLOR="DarkSlateGray"]Hast du die [COLOR="DarkSlateGray"]Grundlagen zur Fehlersuche[/color] gelesen? Hast du Code-Tags benutzt?
        Hast du als URL oder Domain-Beispiele example.com, example.net oder example.org benutzt?
        Super, danke!
        [/COLOR]

        Comment


        • #5
          Fehler gefunden, das tree inder funktion musst mit in die if Bedingung

          PHP Code:
          function tree($id,$platzhalter,$info){
              foreach (
          $info['channel'] as $key => $var) {
                  if(
          $var['pid'] == $id){
                      echo 
          $platzhalter.$var['name'].'<br />';
                      
          tree($var['id'],$platzhalter."-",$info);
                  }
                  
              }
          }
          tree(0,"",$info); 

          Comment

          Working...
          X