If Abrage in einer Schleife..

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

  • If Abrage in einer Schleife..

    Hallo Zusammen,

    schon wieder eine Anfänger Frage

    Folgendes Script versuche ich zum laufen zu bringen:

    Also erst lese ich eine Text-Datei aus (besteht aus 31 1-er und 2-er in beliebeig abwechselnde rheinfolge. Dann wir dem Function "auswerten" übergeben.


    PHP-Code:

    <?php 

    /** 
    * @author Medion 
    * @copyright 2007 
    */ 

    function auswerten($array_b



    for (
    $g=1$g<=30$g++) 

    echo 
    $array_b[$g-1]; 

    if(
    $array_b[$g-1]==2) {echo "Es läuft";} 
    if(
    $array_b[$g-1]==1) {echo "Es läuft nicht";} 





    ?>
    Wenn ich die If Abfragen weglasse, schreibt mir [color=blue]echo $array_b[$g-1] [/color]
    alle Daten in einer Reihe. Also die Daten sind tatsächlich da und können
    ausgegeben werden!

    Wen ich aber [color=blue]echo $array_b[$g-1] [/color] weglasse und versuche mit der beiden "if" Abfragen die Daten auszuwerten dann kommt eine Fehlermeldung:
    [color=red]
    Undefined offset: 1
    Undefined offset: 2
    [/color]
    usw. bis 30
    Bezogen auf die drei Zeilen zwischen den geschweiften Klammern
    in der "for" Schleife.

    Eigentlich sollten die beiden Texte je nach Array-Inhalt ausgegeben werden.

    Für Euere Hilfe schönen Dank jetzt schon.
    Grüße
    Canonn
    Danke und Grüße

  • #2
    bist du sicher, dass in dem array, welches du übergibst auch was drin steht? Undefined Offset bedeutet nämlich einfach, dass er auf ein Feld zugreift, dass nicht existiert. schreib mal ein
    PHP-Code:
     echo sizeof(array_b); 
    vor die for-schleife und schau dir diesen Wert an.

    mfg

    Kommentar


    • #3
      Original geschrieben von krel
      bist du sicher, dass in dem array, welches du übergibst auch was drin steht? Undefined Offset bedeutet nämlich einfach, dass er auf ein Feld zugreift, dass nicht existiert. schreib mal ein
      PHP-Code:
       echo sizeof(array_b); 
      vor die for-schleife und schau dir diesen Wert an.

      mfg
      Wenn ein einfaches echo etwas ausgibt werden wohl daten vorhanden sein

      Ich würde eher mal ein print_r bemühen und mir das Array ausgeben lassen.
      gruss Chris

      [color=blue]Derjenige, der sagt: "Es geht nicht", soll den nicht stoeren, der's gerade tut."[/color]

      Kommentar


      • #4
        Prüfe den Inhalt des Arrays, wie schon gesagt. Und warum verrenkst du dich für den Zugriff auf ein nummerisches Array dermassen?
        PHP-Code:
        //endweder
        for($g=0;$g<count($array);$g++){
        [...]
        }
        //oder gleich
        foreach($array as $key=>$value){
        [...]

        Aber wie gesagt, stelle erst fest wie genau der Aufbau des Arrays ist.

        Gruss

        tobi
        Gutes Tutorial | PHP Manual | MySql Manual | PHP FAQ | Apache | Suchfunktion für eigene Seiten

        [color=red]"An error does not become truth by reason of multiplied propagation, nor does truth become error because nobody sees it."[/color]
        Mohandas Karamchand Gandhi (Mahatma Gandhi) (Source)

        Kommentar


        • #5
          Hallo Zusammen,

          also bei der Prüfung sindfolgenden Ergebnisse rausgekomen:

          prüfen mit
          PHP-Code:
          print_r($array_b); 
          Array ( [0] => 1 [1] => 2 [2] => 1 [3] => 2 [4] => 1 [5] => 2 [6] => 2 [7] => 1 [8] => 1 [9] => 1 [10] => 1 [11] => 1 [12] => 1 [13] => 1 [14] => 1 [15] => 2 [16] => 2 [17] => 1 [18] => 1 [19] => 1 [20] => 2 [21] => 2 [22] => 2 [23] => 2 [24] => 2 [25] => 1 [26] => 1 [27] => 1 [28] => 2 [29] => 1 [30] => 2 ) 1212122111111112211122222111212Array ( [0] => )

          Von wo kommt der zweite [color=blue]Array([0]=>)[/color]her ?

          prüfen mit:
          PHP-Code:
          echo sizeof($array_b
          1212122111111112211122222111212 /* Original TXT Datei hier ohne Trennzeichen, zum Vergleich*/
          [COLOR=red]31[/COLOR]1212122111111112211122222111212[COLOR=red]1[/COLOR]

          Am Ende ist der letzte 1-er irgendwie zu viel.
          Danke und Grüße

          Kommentar


          • #6
            Aber wie gesagt, stelle erst fest wie genau der Aufbau des Arrays ist.
            Also mein Array sollte eigentlich in Ordnung sein, denn die Ausgabe durch:

            PHP-Code:
            function auswerten($array_b)
            {    
                for (
            $g=1$g<=31$g++)
                
                {
                    echo 
            $array_b[$g-1];
                                        
                }
            }

            ?> 
            Gibt exakt die Werte aus die sich im Array befinden:

            1212122111111112211122222111212

            Nur, wie schon gesagt, wen ich mit der If anweisungen ergänze, so

            PHP-Code:
            function auswerten($array_b)
            {    
                for (
            $g=1$g<=31$g++)
                
                {
                    
            /*echo $array_b[$g-1];*/
                                 
            if ($array_b[$g-1]==2){echo "Es geht";}
                                 if (
            $array_b[$g-1]==1){echo "Es geht nicht";}
                                        
                }
            }

            ?> 
            dann meldet der PHP Debug die Offset Probleme.
            Danke und Grüße

            Kommentar


            • #7
              Irgendwie glaube ich das dein Array von vornherein schon fehlerhaft gefüllt ist.

              Wie liest du die Daten aus der Textdatei ?
              gruss Chris

              [color=blue]Derjenige, der sagt: "Es geht nicht", soll den nicht stoeren, der's gerade tut."[/color]

              Kommentar


              • #8
                Hi Chris,

                so sieht mein Gesamscript aus.
                Ich kann kein Fehler feststellen, aber ausgeschlossen ist es ja nichts.

                PHP-Code:

                <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
                <html>

                <head>
                    
                    
                <?php

                /**
                 * @author Medion
                 * @copyright 2007
                 */

                function auswerten($array_b)

                {    
                    for (
                $g=1$g<=31$g++)
                    
                    {
                        
                /*echo $array_b[$g-1];*/
                        
                        
                if ($array_b[$g-1]==2){echo "Es geht";}
                        if (
                $array_b[$g-1]==1){echo "Es geht nicht";}            
                    }

                }

                ?>
                    
                        
                </head>




                <body>

                <?php
                $fp 
                fopen("daten_01j.txt","r");
                        
                  while (!
                feof($fp)){ 
                  
                       
                $text  fgets($fp,100);
                       
                $text trim($text); 
                       
                $array explode(" ",$text); 
                   
                     
                auswerten($array);
                }
                fclose($fp);
                ?>

                </body>
                </html>
                Danke und Grüße

                Kommentar


                • #9
                  Du rufst die Funktion auswerten() so oft auf, wie die Datei Zeilen hat.

                  Wie wärs mit file_get_contents() oder file()?

                  Kommentar


                  • #10
                    Genau.. Poste mal die Ausgabe von

                    PHP-Code:
                    $daten file("daten_01j.txt");
                    echo 
                    "<pre>"
                    print_r($daten); 
                    echo 
                    "</pre>"
                    Vielleicht denkst du auch nochmal über den ansatz von jahlives nach.

                    foreach anstatt for - Offset probleme sollte es bei foreach nicht geben. Wobei mich jetzt doch brennend interessiert wo die zusätzlichen Daten her kommen.

                    Da du mit explode rumhantierst geh ich mal davon aus das in deinem Text mehr Leerzeichen enthalten sind als dir lieb ist
                    gruss Chris

                    [color=blue]Derjenige, der sagt: "Es geht nicht", soll den nicht stoeren, der's gerade tut."[/color]

                    Kommentar


                    • #11
                      Genau.. Poste mal die Ausgabe von



                      PHP:--------------------------------------------------------------------------------
                      $daten = file("daten_01j.txt");
                      echo "<pre>";
                      print_r($daten);
                      echo "</pre>";

                      Hallo hhcm,

                      und das ist das Egebnis (Ausgabe):

                      [COLOR=blue]
                      Array
                      (
                      [0] => 1 2 1 2 1 2 2 1 1 1 1 1 1 1 1 2 2 1 1 1 2 2 2 2 2 1 1 1 2 1 2

                      )

                      [/COLOR]
                      Danke und Grüße

                      Kommentar


                      • #12
                        nicht den kompletten Thread gelesen, aber das sieht ziemlich ungewollt aus. Was hältst du von:

                        PHP-Code:
                        $daten explode(' ',file("daten_01j.txt"));
                        echo 
                        "<pre>";
                        print_r($daten);
                        echo 
                        "</pre>"
                        ???

                        Oder die Daten gleich Zeilenweise speichern?

                        Kommentar


                        • #13
                          fange an langsam zu verzweifeln.
                          Windows XP hat irgendwelche "Sicherheitsupdates" heruntergeladen,das System dann automatisch neu gestartet.
                          [color=red]Nun laufen eineige "Array"-Tests die bisher gelaufen sind, nicht mehr.Kommen die Offset meldungen.[/color]
                          Nun habe ich den neuesten XAMPP Version heruntergeladen und installiert. Ohne Erfolg.
                          Und nun ein Beispiel:
                          ============= daten_01j.txt=============================
                          1 2 1 2 1 2 2 1 1 1 1 1 1 1 1 2 2 1 1 1 2 2 2 2 2 1 1 1 2 1 2
                          ====================================================
                          PHP-Code:

                           <?php
                          $fp 
                          fopen("daten_01j.txt","r");
                                  
                            while (!
                          feof($fp)){ 
                            
                                 
                          $text  fgets($fp,100);
                                 
                          $text trim($text); 
                                 
                          $array explode(" ",$text); 
                             
                               

                          echo 
                          $array[0];

                          }
                          fclose($fp);
                          ?>
                          ====================================================
                          echo $array[0]; gibt mir 1 aus. Das ist so OK
                          [color=red]echo $array[1]; gibt eine Fehlermeldung: Undefined offset 1 in Line 48. [/color]
                          Line 48 entspricht den Befehl: echo $array[1];
                          Das selbe Spielchen mit $array[2] oder $array[3]... etc.

                          Wenn ich statt "echo $array[0]" print_r($array) eingebe, kommt folgendes raus:

                          Array ( [0] => 1 [1] => 2 [2] => 1 [3] => 2 [4] => 1 [5] => 2 [6] => 2 [7] => 1 [8] => 1 [9] => 1 [10] => 1 [11] => 1 [12] => 1 [13] => 1 [14] => 1 [15] => 2 [16] => 2 [17] => 1 [18] => 1 [19] => 1 [20] => 2 [21] => 2 [22] => 2 [23] => 2 [24] => 2 [25] => 1 [26] => 1 [27] => 1 [28] => 2 [29] => 1 [30] => 2 ) Array ( [0] => )

                          Was könnte das schon wieder sein?

                          Grüße
                          Canonn
                          Danke und Grüße

                          Kommentar


                          • #14
                            Du hast nicht zugehört. Nochmal in aller Deutlichkeit ...

                            Deine Datei enthält zwei Zeilen, eine mit Zahlen und eine leere.
                            Anders gesprochen: Am Ende deiner Zahlenreihe steht ein Zeilenumbruch!


                            fgets() liest jeweils eine Zeile aus der Datei. Die erste Zeile mit den Zahlen wird schön zum Array explodiert. Bis hierhin alles super.

                            Dann wird die while-Schleife ein weiteres Mal durchlaufen, fgets() liefert einen leeren String, explode() erzeugt daraus ein einelementiges Array und deshalb knallts beim Zugriff auf $array[1].

                            Eigentlich ganz einfach und zur Lösung mußt du nur dafür sorgen, dass deine Datei nur eine einzige Zeile enthält, d.h. keine Zeilenumbrüche.
                            Sinnvoller wäre aber, gleich auf ein vernünftiges Speicherformat umzustellen.

                            Kommentar


                            • #15
                              Du hast nicht zugehört. Nochmal in aller Deutlichkeit ...

                              Deine Datei enthält zwei Zeilen, eine mit Zahlen und eine leere.
                              Anders gesprochen: Am Ende deiner Zahlenreihe steht ein Zeilenumbruch!
                              Hallo,
                              das hat damit nichts zu tun. Hier erneut im Detail:

                              PHP-Code:
                              <?php
                              $fp 
                              fopen("daten_01j.txt","r");
                                      
                                while (!
                              feof($fp)){ 
                                
                                     
                              $text  fgets($fp,100);
                                     
                              $text trim($text);
                                     
                              $array explode(" ",$text); 
                                  
                              echo 
                              $text;
                              print_r($array);

                              }
                              fclose($fp);

                              ?>
                              bringt folgende Ausgabe:

                              1 2 1 2 1 2 2 1 1 1 1 1 1 1 1 2 2 1 1 1 2 2 2 2 2 1 1 1 2 1 2
                              Array ( [0] => 1 [1] => 2 [2] => 1 [3] => 2 [4] => 1 [5] => 2 [6] => 2 [7] => 1 [8] => 1 [9] => 1 [10] => 1 [11] => 1 [12] => 1 [13] => 1 [14] => 1 [15] => 2 [16] => 2 [17] => 1 [18] => 1 [19] => 1 [20] => 2 [21] => 2 [22] => 2 [23] => 2 [24] => 2 [25] => 1 [26] => 1 [27] => 1 [28] => 2 [29] => 1 [30] => 2 )
                              Array ( [0] => )

                              echo $text gibt mir den Inhalt aus. So ist OK.
                              print_r($array) zeigt mir, daß z.B $array[10] den Wer 1 beinhaltet oder $array[6] den Wert 2 beinhaltet bzw. beinhalten sollte.

                              Logischerweise sollte der folgende Script den Wert1 ausgeben:



                              PHP-Code:
                              <?php
                              $fp 
                              fopen("daten_01j.txt","r");
                                      
                                while (!
                              feof($fp)){ 
                                
                                     
                              $text  fgets($fp,100);
                                     
                              $text trim($text);
                                     
                              $array explode(" ",$text); 
                                  
                              echo 
                              $array[10];

                              }
                              fclose($fp);

                              ?>
                              Und genau das tut er nicht.
                              Danke und Grüße

                              Kommentar

                              Lädt...
                              X