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

  • Poolshark
    hat ein Thema erstellt PHP notice Undefined offset: 1.

    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!

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

    Einen Kommentar schreiben:


  • Poolshark
    antwortet
    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) }

    Einen Kommentar schreiben:


  • rkr
    antwortet
    Bekommst du zu der Notice auch Datei und Zeilennummer?

    Einen Kommentar schreiben:


  • Poolshark
    antwortet
    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?

    Einen Kommentar schreiben:


  • Poolshark
    antwortet
    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... ?

    Einen Kommentar schreiben:


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

    Einen Kommentar schreiben:

Lädt...
X