Geltungsbereich in foreach-Schleife?

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

  • Geltungsbereich in foreach-Schleife?

    Hallo Community!

    Ich habe ein Problem mit folgendem Code:
    PHP-Code:
    for($i=0$i<10$i++) {
       foreach( 
    $sets as $s ) {
         
    $text 'Irgendwas_'.$s.'_'.$i;
       }

    Es scheint so, als ob die Laufvariable $i in der foreach-Schleife nicht sichtbar ist, denn der Wert dafür im generierten Text ist immer 0. Wie schaffe ich es, aus der foreach-Schleife nun auf die Iterations-Variable der äusseren (for-)Schleife zuzugreifen?

    Besten Dank für eure Hilfe!
    Dave

    Achja: Das Skript läuft unter PHP4...
    Zuletzt geändert von ammannd; 23.08.2006, 09:16.

  • #2
    Re: Geltungsbereich in foreach-Schleife?

    Problem nicht nachvollziehbar, weder theoretisch noch praktisch.

    Ersetze $text = mal durch ein schlichtes echo für eine direkte Ausgabe.
    Ich vermute, dass du mit $text nicht das machst, was du eigentlich willst ...
    I don't believe in rebirth. Actually, I never did in my whole lives.

    Kommentar


    • #3
      Ich kann mir ja eine Menge vorstellen, aber dass $i immer 0 sein soll, das nun wirklich nicht. Und von welchem ausgegebenen Text redest du da? Ich sehe weit und breit keine Ausgabe.

      Gruß
      Uwe

      Kommentar


      • #4
        Problem nicht nachvollziehbar, weder theoretisch noch praktisch.
        Das beruhigt mich insofern, dass damit meine (heile) PHP-Welt wieder in Ordnung ist und ich wohl noch irgendwo noch einen (ziemlich doofen) Fehler habe! Ich glaubte, irgendwann mal was von einem Geltungsbereich innerhalb von foreach-Schleifen gelesen zu haben, wahrscheinlich meine ich damit aber was anderes, das hier keine Rolle spielt...

        Und von welchem ausgegebenen Text redest du da? Ich sehe weit und breit keine Ausgabe.
        Stell dir halt an geeigneter Stelle ein echo vor, ist ja nur ein Sample-Code...!

        Ich such mal weiter, danke für die Antworten !

        Kommentar


        • #5
          Original geschrieben von ammannd
          Stell dir halt an geeigneter Stelle ein echo vor, ist ja nur ein Sample-Code...!
          Wäre nur schön, wenn der das Problem wenigstens nachvollziehbar macht.
          I don't believe in rebirth. Actually, I never did in my whole lives.

          Kommentar


          • #6
            Ok, hier mal etwas detailierter, denn mein Problem besteht leider immer noch:
            PHP-Code:
            $sets = array( '11''12''21''22''31''32' );
            for( 
            $i=0$i<3$i++ )    {
                foreach( 
            $sets as $s )    {
                    
            $resInputArr[] = 'set'.$s.'_'.$i;
                }
                
            $resInput $resInputArr[0].':'.$resInputArr[1].', '.
                    
            $resInputArr[2].':'.$resInputArr[3].', '.
                    
            $resInputArr[4].':'.$resInputArr[5].'<br />';
                
            $totalRes .= $resInput;
            }
            echo 
            $totalRes
            Das ergibt bei mir folgende Ausgabe:
            Code:
            set11_0:set12_0, set21_0:set22_0, set31_0:set32_0
            set11_0:set12_0, set21_0:set22_0, set31_0:set32_0
            set11_0:set12_0, set21_0:set22_0, set31_0:set32_0
            Ich hätte aber gerne folgendes::
            Code:
            set11_0:set12_0, set21_0:set22_0, set31_0:set32_0
            set11_1:set12_1, set21_1:set22_1, set31_1:set32_1
            set11_2:set12_2, set21_2:set22_2, set31_2:set32_2

            Kommentar


            • #7
              Original geschrieben von ammannd
              PHP-Code:
              $sets = array( '11''12''21''22''31''32' );
              for( 
              $i=0$i<3$i++ )    {
                  foreach( 
              $sets as $s )    {
                      
              $resInputArr[] = 'set'.$s.'_'.$i
              Was machst du hier?
              Du erzeugst jedes mal ein neues Array-Element.

              PHP-Code:
                  }
                  
              $resInput $resInputArr[0].':'.$resInputArr[1].', '.
                      
              $resInputArr[2].':'.$resInputArr[3].', '.
                      
              $resInputArr[4].':'.$resInputArr[5].'<br />';
                  
              $totalRes .= $resInput;

              Was machst du hier?
              Du betrachtest jedes mal die ersten sechs Array Elemente.

              Unter der Annahme, dass deine foreach-Schleife sechs Array-Elemente erzeugt, hast du nach dem ersten Durchlauf deiner for-Schleife also sechs Array-Elemente, und betrachtest die ersten sechs.
              Nach dem zweiten Durchlauf hast du sechs plus sechs gleich zwölf Array-Elemente - die ersten sechs mit $i=0, die zweiten sechs mit $i=1. Und was machst du? Du betrachtest nach wie vor die ersten sechs ...

              Vermutlich möchtest du einfach vor der foreach-Schleife $resInputArr initialisieren.
              I don't believe in rebirth. Actually, I never did in my whole lives.

              Kommentar


              • #8
                Ja bravo bin ich doof... Klar, das ist es! Ich habe schlichtweg vergessen, die Variable $resInputArr vor jedem Durchgang zu leeren... Shit!
                ...und ich wohl noch irgendwo noch einen (ziemlich doofen) Fehler habe!
                Wusst' ich's doch!!

                Ich sag Danke vielmals für die Hilfe!!
                Gruss
                Dave

                Kommentar

                Lädt...
                X