CSV-Datei auslesen - Fehler: Undefined index

fUnKuCh3n

Erfahrenes Mitglied
Hallo zusammen,
ich erhalte beim Auslesen von Daten aus einer CSV-Datei mit Spaltentiteln folgende Fehlermeldung beim Zugriff auf die jeweils erste Spalte im Array.

Das zweidimensionale Array sieht wie folgt aus:

Code:
Array
(
[0] => Array
(
[System Barcode] => A8FA362
[Asset Number] => RDPC105782
[Model] => 5550/E5550
[Order Number] => 69800335
[Warranty Exp 3 Year] => 03/10/2018
[OS] => Windows 7 64-bit
[MacAddress] => 204747C2E0B0
)

[1] => Array
(
[System Barcode] => 7TH8361
[Asset Number] => RDPC105783
[Model] => 5550/E5550
[Order Number] => 69800335
[Warranty Exp 3 Year] => 03/10/2018
[OS] => Windows 7 64-bit
[MacAddress] => 204747EE8617
)

)

Ich versuche innerhalb einer Schleife dann entsprechend wie folgt auf die einzelnen Zeilen der Datei zuzugreifen:
PHP:
 for ($c=0; $c < $num; $c++) 
        {              
            //make the data from the array to vars
            $servicetag         =       $data[$c]['System Barcode'];
            $assettnumber       =       $data[$c]['Asset Number'];
            $macadress          =       $data[$c]['MacAddress'];

Nun ist das Problem, dass ich nicht auf die Inhalte von 'System Barcode' zugreifen kann, füge ich vorne eine weitere Spalte an klappt es, es scheint so als ob die erste Spalte ignoriert wird - wieso auch immer..

Der Fehler lautet: Notice: Undefined index: System Barcode in C:\xampp\htdocs\csv_upload.php on line 88

Habe ich einen Denkfehler oder ist irgendwo die Logik falsch?
 
Schreib mal als erste Zeile in der for-Schleife:

var_dump(array_keys($data[$c])); exit;

Dann siehst du schon mal, ob es den Schlüssel gibt.


Ansonsten lösch den "System Barcode"-String mal raus und tipp ihn neu. Halte ich zwar für sehr unwahrscheinlich, aber es ist mir (bei LaTeX, wenn man Text aus Word oder LibreOffice kopiert) schon untergekommen, dass sich ein „Leerzeichen“ in den Code verirrt, das gar keins ist, sondern ein geschütztes Leerzeichen oder ein halbbreites Leerzeichen oder so.

- https://de.wikipedia.org/wiki/Leerzeichen#Schriftzeichen_in_ASCII_und_andere_Kodierungen

Wie gesagt, halte ich für unwahrscheinlich, aber wäre schnell auszuschließen.
 
Schreib mal als erste Zeile in der for-Schleife:

var_dump(array_keys($data[$c])); exit;

Gesagt, getan:

PHP:
array(7) {
[0]=>
string(17) "System Barcode"
[1]=>
string(12) "Asset Number"
[2]=>
string(5) "Model"
[3]=>
string(12) "Order Number"
[4]=>
string(19) "Warranty Exp 3 Year"
[5]=>
string(2) "OS"
[6]=>
string(10) "MacAddress"
}

Ich habe den Bezeichner schon komplett neu getippt, kopiert etc. pp. - das sollte auch nicht zutreffen, denn nehme ich z.b. eine andere Reihenfolge der Spalten in der CSV-Datei ist das Problem nach wie vor bei der ersten Spalte vorhanden.
 
Kannst du ein testbares Beispiel erstellen (möglichst mit CSV-Eingabe), das das Problem zeigt? Das sollte nämlich wirklich nicht so sein. Bin mal gespannt, woran es liegt. :)
 
Wie man in dein var_dump schon sieht hat dein Array keine Strings als Keys sondern Integer Werte.
Die ist auch das normale Verhalten, wenn man eine CSV Datei mittels fgetcsv ausliest.

Wenn du also dein Werte mittels des dazugehörigen Key Ansprichst, dann gibt er dir die Werte aus.
An deinem Beispiel:
PHP:
for ($c=0; $c < $num; $c++)   {            
            //make the data from the array to vars
            $servicetag         =       $data[$c][0];  // System Barcode
            $assettnumber       =       $data[$c][1]; // Asset Number
            $macadress          =       $data[$c][6];  // MacAddress
 
Unabhängig von dem Problem sollte zum durchlaufen von Arrays eine foreach-Schleife verwendet werden :p
 
Leerzeichen in Array-Schlüsseln sind prinzipiell nichts Besonderes. Daran wird es nicht scheitern. Aber, wie gesagt, man müsste ein Beispiel sehen, bei dem das Problem auftritt.
 

Neue Beiträge

Zurück