Foreach Variable wird nicht geändert

Einklappen
X
 
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • 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.

    Kommentar


    • #3
      Zitat von wahsaga Beitrag anzeigen
      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?

      Kommentar


      • #4
        Zitat von Lehrling1991 Beitrag anzeigen
        Ist es überhaupt möglich die Variable innerhalb von foreach zu ändern?
        Warum sollte das nicht möglich sein?

        Kommentar


        • #5
          Zitat von h3ll Beitrag anzeigen
          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.

          Kommentar


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

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

            Kommentar


            • #7
              Zitat von h3ll Beitrag anzeigen
              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

              Kommentar


              • #8
                Zitat von Lehrling1991 Beitrag anzeigen
                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.

                Kommentar

                Lädt...
                X