Merkwürdiges foreach Verhalten

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

  • Merkwürdiges foreach Verhalten

    Ich fall mal mit der Tür ins Haus und zeige mein Schnipsel:

    PHP-Code:
    foreach ($total_array_not_unique[$row_order['website_id']]['stats'][$year
    as 
    $month_key => $month_visits) {
        
    // hier steht nichts

    Das oben genannte führt dazu, dass in z.Z. genau einem einzigen Fall, die foreach Schleife (in der sich auch der oben genannte Schnipsel befindet) nur ein einziges mal komplett durchlaufen wird.

    Kommentiere ich die Schleife aus, so läuft die foreach-Schleife, in der sich der Schnipsel oben befindet, korrekterweise 3mal durch.

    Wenn ich den Schnipsel jetzt so ändere:

    PHP-Code:
    $test $total_array_not_unique[$row_order['website_id']]['stats'][$year];
    foreach (
    $test as $month_key => $month_visits) {
        
    // hier steht nichts

    wird die obere Schleife korrekt 3mal durchlaufen. Lasse ich $test weg und schreibe den Array (also $total_array_not_unique[...]) direkt in die Schleife, wird die obere - nennen wir sie mal Hauptschleife, nur ein einziges mal durchlaufen.

    Ich komme einfach nicht dahinter, wieso sich das Ding so verhält.
    Sunshine CMS
    BannerAdManagement
    Borlabs - because we make IT easier
    Formulargenerator [color=red]Neu![/color]
    Herkunftsstatistik [color=red]Neu![/color]

  • #2
    Wie sieht das Array denn genau aus?
    [FONT="Helvetica"]twitter.com/unset[/FONT]

    Shitstorm Podcast – Wöchentliches Auskotzen

    Kommentar


    • #3
      PHP-Code:
      $total_array = array(25=>array('stats'=>array(2007=>array(10=>211=>212=>2)))) 
      Was mich ja so verwirrt ist, dass es funktioniert, wenn ich den Inhalt in die Variable $test kopiere
      Sunshine CMS
      BannerAdManagement
      Borlabs - because we make IT easier
      Formulargenerator [color=red]Neu![/color]
      Herkunftsstatistik [color=red]Neu![/color]

      Kommentar


      • #4
        Ich meine eher dieses Array: $total_array_not_unique.
        [FONT="Helvetica"]twitter.com/unset[/FONT]

        Shitstorm Podcast – Wöchentliches Auskotzen

        Kommentar


        • #5
          Sorry, ist das gleiche, habe ausversehen statt $total_array_not_unique nur $total_array geschrieben.
          Sunshine CMS
          BannerAdManagement
          Borlabs - because we make IT easier
          Formulargenerator [color=red]Neu![/color]
          Herkunftsstatistik [color=red]Neu![/color]

          Kommentar


          • #6
            Es sieht fast so aus, als würde innerhalb der Schleife einer der Indizes verändert.
            Gruss
            H2O

            Kommentar


            • #7
              Untestbar!!
              Notice: Undefined variable: row_order in H:\Programme\xampp\htdocs\fragmente\foreach_bad.php on line 9 Notice: Undefined index: in H:\Programme\xampp\htdocs\fragmente\foreach_bad.php on line 9 Notice: Undefined variable: year in H:\Programme\xampp\htdocs\fragmente\foreach_bad.php on line 9 Warning: Invalid argument supplied for foreach() in H:\Programme\xampp\htdocs\fragmente\foreach_bad.php on line 10
              Das $total_array entspricht nicht dem in der Foreach!!
              Zuletzt geändert von combie; 21.12.2007, 10:50.
              Wir werden alle sterben

              Kommentar


              • #8
                Ich kann dieses Verhalten mit PHP5 nicht reproduzieren. Tut mir leid
                [FONT="Helvetica"]twitter.com/unset[/FONT]

                Shitstorm Podcast – Wöchentliches Auskotzen

                Kommentar


                • #9
                  Original geschrieben von unset
                  Ich kann dieses Verhalten mit PHP5 nicht reproduzieren. Tut mir leid
                  Das könnte ich sogar nachvollziehen. Ich werde jetzt die Schleife nehmen, an Anfang packen und alles andere auskommentieren und dann prüfen, ob es 3mal durchläuft.
                  Sunshine CMS
                  BannerAdManagement
                  Borlabs - because we make IT easier
                  Formulargenerator [color=red]Neu![/color]
                  Herkunftsstatistik [color=red]Neu![/color]

                  Kommentar


                  • #10
                    Okay, irgendwie verschluckt sich PHP an meinen Referenzen. Habe jetzt weiter oben zwei Referenzen entfernt, jetzt läuft es einwandfrei.
                    Sunshine CMS
                    BannerAdManagement
                    Borlabs - because we make IT easier
                    Formulargenerator [color=red]Neu![/color]
                    Herkunftsstatistik [color=red]Neu![/color]

                    Kommentar


                    • #11
                      Hö? Wo hast du denn Referenzen benutzt? In dem geposteten Code jedenfalls nicht. Darauf hättest du natürlich hinweisen sollen, zumal ich sowas eh vermutet habe
                      [FONT="Helvetica"]twitter.com/unset[/FONT]

                      Shitstorm Podcast – Wöchentliches Auskotzen

                      Kommentar


                      • #12
                        Ja, hatte ich auch erst nicht vermutet, weil die Referenz nicht mal mit der Schleife zu tun hatte. Naja, jetzt gehts, trotzdem irgendwie strange.
                        Sunshine CMS
                        BannerAdManagement
                        Borlabs - because we make IT easier
                        Formulargenerator [color=red]Neu![/color]
                        Herkunftsstatistik [color=red]Neu![/color]

                        Kommentar


                        • #13
                          PHP hat Probleme mit Referenzen in Arrays. Hoffe, in der 6er Version wird da mal ein wenig aufgeräumt!
                          In bestimmten Fällen bekommst du wenigstens eine Notice:
                          PHP-Code:
                          <?php
                          error_reporting
                          E_ALL );    
                          class 
                          Test {
                              private 
                          $var = array( 'foo'=>'foo' );
                              function &
                          getByRef$name ) {
                                  return( 
                          $this->var[$name] );
                              }
                          }
                          $t = new Test();
                          $t->getByRef'foo' );
                          ?>
                          ergibt:
                          Notice: Only variable references should be returned by reference in xxx.php on line 7
                          Zuletzt geändert von PHP-Desaster; 21.12.2007, 12:13.

                          Kommentar


                          • #14
                            Ja diesen Fall hatte ich auch schon. Irgendwie nervig....
                            Sunshine CMS
                            BannerAdManagement
                            Borlabs - because we make IT easier
                            Formulargenerator [color=red]Neu![/color]
                            Herkunftsstatistik [color=red]Neu![/color]

                            Kommentar


                            • #15
                              Original geschrieben von PHP-Desaster
                              PHP-Code:
                              return( $this->var[$name] ) 
                              ohne klammern bei return kommt keine notice.

                              http://de2.php.net/manual/de/function.return.php
                              Hinweis: Beachten Sie, dass return() ein Sprachkonstrukt und keine Funktion ist. Die Klammern um ein Argument sind deshalb nur zwingend notwendig, wenn es sich um einen Ausdruck handelt, dessen Ergebnis zurückgegeben werden soll. Es ist gebräuchlich die Klammern wegzulassen, wenn eine Variable zurück gegeben soll.

                              Kommentar

                              Lädt...
                              X