Ankündigung

Einklappen
Keine Ankündigung bisher.

PHP notice Undefined offset: 1

Einklappen

Neue Werbung 2019

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

  • PHP notice Undefined offset: 1

    Hallo,

    habe mal wieder eine Frage an Euch:

    Ich lese ein file ein indem folgende header Definition gilt:

    Code:
    dat1/unit1/int | dat2/unit2/double | dat3/unit3/char
    wobei die Werte 'int', 'double' und 'char' beliebig für jeden Datensatzverwendet werden dürfen. Leider bekomme ich aber immer den Fehler -> Undefined offset: 1

    Ich habe folgenden code:

    PHP-Code:
    $tmpHeadArray explode('|'$row);

       foreach (
    $tmpHeadArray as $tmpArr):
         
    $headEntries explode('/'trim($tmpArr));
           
         if (
    strlen($headEntries[0]) > 20):
            
    // Fehlermeldung
         
    else if (strlen($headEntries[1]) > 10):
            
    // Fehlermeldung
         
    else if ($headEntries[0] !== 'int' && $headEntries[1] !== 'double'  && $headEntries[2] !== 'char' ):
            
    // Fehlermeldung
         
    endif;
       endforeach; 
    var_dump($headerEntries) sagt, dass alles richtig eingelesen und gesplittet wurde...

    Kann mir jemand helfen?

    Danke!


  • #2
    Du solltest die alternative Syntax für Kontrollstrukturen eigentlich nur in Templates verwenden. Es gibt aber kein Gesetz, dass die Verwendung hier so untersagt. Ist schlechter Stil.

    Die Zeile
    PHP-Code:
    else if ($headEntries[0] === 'int' && $headEntries[1] === 'int'  && $headEntries[2] === 'char' ): 
    kann so nicht funktionieren, oder? Ich interpretiere den Sinn dieser Zeile sicher falsch...
    Standards - Best Practices - AwesomePHP - Guideline für WebApps

    Kommentar


    • #3
      Danke für die schnelle Antwort.

      Ich verwende das in einer Modelklasse in yii. Da glaub ich darf man das schon so machen

      Du hast absolut recht. Die Zeile müsste natürlich so lauten:

      PHP-Code:
      else if ($headEntries[2] !== 'int' && $headEntries[2] !== 'double'  && $headEntries[2] !== 'char' ): 
      Aber eigentlich unwichtig für mein Problem. Wie gesagt irgendwas geht mit dem explode falsch... ?

      Kommentar


      • #4
        Habe den Fehler jetzt noch einmal analysiert. Ich kann ihn so reproduzieren:

        PHP-Code:
        foreach ($headentry as $test){
           
        $a[]=$test;
        }

        var_dump($a);

        $headentry[0] = $a[0];
        $headentry[1] = $a[1];
        $headentry[2] = $a[2]; 
        var_dump($a) liefert
        Code:
        array(3) { [0]=> string(8) "datName1" [1]=> string(8) "datUnit1" [2]=> string(3) "int" }
        Und PHP Notice -> Undefined offset: 1

        Warum ist das so?

        Kommentar


        • #5
          Bekommst du zu der Notice auch Datei und Zeilennummer?
          Standards - Best Practices - AwesomePHP - Guideline für WebApps

          Kommentar


          • #6
            Notice hängt bei Zeile $headentry[1] = $a[1];.

            Sonst gibts keine Info.

            Ich habe den vorigen Code um folgende Zeilen erweitert:

            PHP-Code:
            if (!array_key_exists(1$headentry) ) {
               echo 
            '<pre>'.var_dump($headentry$this->testcountarray_keys($headentry)).'</pre>';
            } else {
               echo 
            '<pre>'.var_dump($headentry$this->testcountarray_keys($headentry)).'</pre>';

            wobei $this->testcount die Anzahl der foreach Durchgänge loggt (nur um die Ausgabe zu vervollständigen). Das ist das Ergebnis. Woher kommt das zusätzliche Array?

            Code:
            array(3) { [0]=> string(8) "datName1" [1]=> string(8) "datUnit1" [2]=> string(3) "int" } int(0) array(3) { [0]=> int(0) [1]=> int(1) [2]=> int(2) }
            
            array(3) { [0]=> string(8) "datName2" [1]=> string(8) "datUnit2" [2]=> string(6) "double" } int(1) array(3) { [0]=> int(0) [1]=> int(1) [2]=> int(2) }
            
            array(3) { [0]=> string(8) "datName3" [1]=> string(8) "datUnit3" [2]=> string(4) "char" } int(2) array(3) { [0]=> int(0) [1]=> int(1) [2]=> int(2) }
            
            array(1) { [0]=> string(1) "1" } int(3) array(1) { [0]=> int(0) }

            Kommentar


            • #7
              Interessant wäre, wie der Datenstring im Original aussieht (und zwar exakt!).

              Mit den Beispieldaten und dem geposteten Code ist das Phänomen nämlich nicht nachvollziehbar, die Vermutung liegt nahe, das in den Originaldaten noch mehr Zeichen vorhanden sind, die beim Extrahieren zu einem weiteren Array führen.
              Über 90% aller Gewaltverbrechen passieren innerhalb von 24 Stunden nach dem Konsum von Brot.

              Kommentar

              Lädt...
              X