Foreach Variable wird nicht geändert

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

  • Foreach Variable wird nicht geändert

    Hallo Zusammen

    Folgendes Problem: ICh definiere ausserhalb meiner foreach-Schleife eine Variable $tiefejetzt.
    Diese verändere ich während der Schleifendurchläufe. Damit das ganze funktioniert müsste diese Änderung global geschehen, also auch ausserhalb von foreach vorhanden sein.

    Hab ein paar Sachen darüber gelesen, und meiner Meinung nach sollte es so funktionieren.

    Wie ihr sicher schon vermutet, es funktioniert nicht! Das echo nach der Schleife zeigt mir immer eine 1, egal auf welcher Ebene wir uns befinden.

    Hier mein PHP-Code
    PHP Code:
    echo '<ul class="t1">';
    $tiefejetzt 1;

    foreach (
    $entries as $entry) {
    global 
    $tiefejetzt;
        if (
    $entry['path'] != './Inhalt'){    
                if (
    $tiefejetzt == $entry['depth']) {        
                    echo 
    '<li><a href="./Startseite.php?l=' $entry['path'] . '">' $entry['title'] . '</a>';
                    echo 
    '</li>';
                    }
                else {
                    if (
    $tiefejetzt $entry['depth']) {
                        
    $tiefe "t".$entry['depth'];
                        echo 
    '<li>';
                        echo 
    $ausgabe "<ul class='$tiefe'>";
                        
    $tiefejetzt $tiefejetzt 1;
                    }
                    elseif (
    $tiefejetzt $entry['depth']) {
                        echo 
    '</ul>';
                        echo 
    '</li>';
                        
    $tiefejetzt $tiefejetzt -1;
                    } 
                }

            }
    } echo 
    $tiefejetzt//Um zu testen welchen Wert die Variable nach dem jeweiligen Durchlauf hat
    echo '</ul>'
    mein array ist so aufgebaut:
    PHP Code:
     $ret[] = array(
            
    'depth' => $depth,
            
    'path'  => $path,
            
    'title' => basename($path)    //Basename gibt letzten Namensteil einer Pfadangabe zurück
        
    ); 
    Gibt es eine Möglichkeit die Variable innerhalb der foreach-Schleife zu ändern?

    MFG
    derLehrling

  • #2
    Was willst du mit global am Beginn des Schleifenkörpers? Das ist vollkommen unsinnig dort, die Variable ist an der Stelle sowieso sichtbar.
    I don't believe in rebirth. Actually, I never did in my whole lives.

    Comment


    • #3
      Originally posted by wahsaga View Post
      Was willst du mit global am Beginn des Schleifenkörpers? Das ist vollkommen unsinnig dort, die Variable ist an der Stelle sowieso sichtbar.
      Oh das sollte nicht da stehen.. Schon wieder gelöscht, war ein Versuch die Variable innerhalb von foreach mit der Variable ausserhalb zu verknüpfen.. Ist es überhaupt möglich die Variable innerhalb von foreach zu ändern?

      Comment


      • #4
        Originally posted by Lehrling1991 View Post
        Ist es überhaupt möglich die Variable innerhalb von foreach zu ändern?
        Warum sollte das nicht möglich sein?

        Comment


        • #5
          Originally posted by h3ll View Post
          Warum sollte das nicht möglich sein?
          Na ich weiss es nicht.. Hab jetzt schon diverse Sachen probiert, und die Variable ausserhalb ist immer 1.. Bis jetzt konnte ich den Wert innerhalb ändern, jedoch ausserhalb war sie sofort wieder 1..

          Was ich jetzt gerade probiert habe, ist daraus eine Sessionvariable zu generieren, jedoch auch ohne Erfolg..

          PHP Code:
          echo '<ul class="t1">';
          $_SESSION["username"] = 1;

          foreach (
          $entries as $entry) {
              if (
          $entry['path'] != './Inhalt'){    
                      if (
          $_SESSION["username"] == $entry['depth']) {        
                          echo 
          '<li><a href="./Startseite.php?l=' $entry['path'] . '">' $entry['title'] . '</a>';
                          echo 
          '</li>';
                          }
                      else {
                          if (
          $_SESSION["username"] < $entry['depth']) {
                              
          $tiefe "t".$entry['depth'];
                              echo 
          '<li>';
                              echo 
          $ausgabe "<ul class='$tiefe'>";
                              
          $_SESSION["username"] = $_SESSION["username"] + 1;
                          }
                          elseif (
          $_SESSION["username"] > $entry['depth']) {
                              echo 
          '</ul>';
                              echo 
          '</li>';
                              
          $_SESSION["username"] = $_SESSION["username"] -1;
                          } 
                      }

                  }
          } echo 
          $_SESSION["username"];
          echo 
          '</ul>'
          Wie mache ich die Änderung global gültig?? Da liegt doch mein Fehler oder? Die Variable wird momentan nur Schleifenintern geändert.

          Comment


          • #6
            Du sollst die Session nicht als globalen Variablenspeicher missbrauchen.

            Dein Problem ist offenbar die Schleife selber, und nicht die PHP-Variablen.

            Comment


            • #7
              Originally posted by h3ll View Post
              Du sollst die Session nicht als globalen Variablenspeicher missbrauchen.

              Dein Problem ist offenbar die Schleife selber, und nicht die PHP-Variablen.
              PHP Code:
              echo '<ul class="t1">';
              $tiefejetzt 1;
              foreach (
              $entries as $entry) {
                  if (
              $entry['path'] != './Inhalt'){    
                          if (
              $tiefejetzt == $entry['depth']) {        
                              echo 
              '<li><a href="./Startseite.php?l=' $entry['path'] . '">' $entry['title'] . '</a>';
                              echo 
              '</li>';
                              }
                          else {
                              if (
              $tiefejetzt $entry['depth']) {
                                  
              $tiefe "t".$entry['depth'];
                                  echo 
              '<li>';
                                  echo 
              $ausgabe "<ul class='$tiefe'>";
                                  
              $tiefejetzt $tiefejetzt 1;
                              }
                              elseif (
              $tiefejetzt $entry['depth']) {
                                  echo 
              '</ul>';
                                  echo 
              '</li>';
                                  
              $tiefejetzt $tiefejetzt -1;
                              } 
                          }

                      }
              echo 
              $tiefejetzt//Wird korrekt rauf bzw. runtergezählt
              } echo $tiefejetzt;    //Bleibt konstant 1
              echo '</ul>'
              ok hab ich dann auch schon wieder verworfen..

              Aber schau mal, wenn ich die Variable innerhalb der Schleife ausgebe, hat sie den richtigen Wert. (Hier das erste echo am Schluss.)

              Das zweite echo nach der Schleife zeigt mir, das der Wert innerhalb von foreach abgeschirmt wird und den Wert der Variable ausserhalb nicht ändert.

              Wie kann ich nun diese Variable so gestalten, das die Änderungen auch ausserhalb der foreach-Schleife gültig sind?

              Aber wenn du meinst meine Schleife sei das Problem, wiso denn das? Sehs erlich gesagt gerade nicht.. Die ist doch richtig aufgebaut etc?

              mfg derLehrling

              Comment


              • #8
                Originally posted by Lehrling1991 View Post
                Aber schau mal, wenn ich die Variable innerhalb der Schleife ausgebe, hat sie den richtigen Wert. (Hier das erste echo am Schluss.)

                Das zweite echo nach der Schleife zeigt mir, das der Wert innerhalb von foreach abgeschirmt wird und den Wert der Variable ausserhalb nicht ändert.
                Nein. Das zeigt, dass die Variable im letzten Schleifendurchgang auf 1 gesetzt wird.

                Comment

                Working...
                X