CSV zerlegen und die Daten in Variablen schreiben

fUnKuCh3n

Erfahrenes Mitglied
Hallo,

ich habe eine CSV Datei mit folgendem Inhalt:

Code:
System Barcode,Asset Number,Model,Order Number,Warranty Exp 3 Year,OS,MacAddress
E1FN45J,105023,390,067958021,04-SEP-14,Win7 32bit,AE67E50C7DFB

Das ganze ist i.d.R 10 Zeilen lang.

Nun lese ich diese Datei mit folgendem Script ein:
PHP:
<?php
error_reporting(0);
$row = 1;
                                      
$handle = fopen ("test.csv","r");              
while ( ($data = fgetcsv ($handle, 1000, ",")) !== FALSE ) 
{
                                                
   $num = count ($data);
                                       
   $row++;  
                                    
                                               
   for ($c=0; $c < $num; $c++) 
   {     

       print $data[$c] . "<br>\n";            
   }
}
fclose ($handle);

Und erhalte folgendes ausgegeben:
Code:
System Barcode
Asset Number
Model
Order Number
Warranty Exp 3 Year
OS
MacAddress
E1FN45J
105023
390
067958021
04-SEP-14
Win7 32bit
AE67E50C7DFB

Allerdings würde ich mir die Daten nicht ausgeben lassen wollen direkt, sondern eher jeden einzelnen Wert pro "Spalte" in eine Variable schreiben und noch weitere Operationen ausführen.

Außerdem ist die 1. Zeile eigentlich unwichtig und soll beim bearbeiten ignoriert werden.

Jedoch komme ich gerade nicht so ganz drauf wie ich die einzelnen Werte ansprechen kann.

Wäre über Hilfe dankbar.
LG
Sascha
 
Falls ich dich richtig verstanden habe:
Du kannst das ganze doch in ein Array Zeilenweise speichern.
Grundsätzlich sollte das so funktionieren:
PHP:
// $csv Zeilenweise füllen
$csv = explode("\r\n", implode("", file("test.csv"));

foreach($csv as $key => $line){
	// Jede Zeile wiederum in array wandeln
	$csv[$key] = explode(",", $line);
}

// Erstes Item entfernen
array_shift($csv);

Die Trennzeichen in der Explode-Funktion musst du aber ggf. anpassen.

Grüße


Edit: Vergiss den ersten Ansatz von mir...
Du hast in $data bereits alles, was du brauchst.
PHP:
$handle = fopen ("strings.txt","r");              // Datei zum Lesen öffnen
$csv = array();
while ( ($data = fgetcsv ($handle, 1000, ",")) !== FALSE ) { // Daten werden aus der Datei
		$csv[] = $data;
		var_dump($data);
}
fclose ($handle);

// Ausgabe:
// array
//   0 => string 'System Barcode' (length=14)
//   1 => string 'Asset Number' (length=12)
//   2 => string 'Model' (length=5)
//   3 => string 'Order Number' (length=12)
//   4 => string 'Warranty Exp 3 Year' (length=19)
//   5 => string 'OS' (length=2)
//   6 => string 'MacAddress' (length=10)
// array
//   0 => string 'E1FN45J' (length=7)
//   1 => string '105023' (length=6)
//   2 => string '390' (length=3)
//   3 => string '067958021' (length=9)
//   4 => string '04-SEP-14' (length=9)
//   5 => string 'Win7 32bit' (length=10)
//   6 => string 'AE67E50C7DFB' (length=12)


Damit solltest du nun gut weiterarbeiten können. Nach der while-Schleife hast du alle Daten im Array $csv.
 
Zuletzt bearbeitet:
Du kannst einfach ein mehrdimensionales Array erstellen

PHP:
<?php 

$handle = fopen ("mytest.csv","r");
// Variablen initialisieren
$headerFlag = true;      
$data = array();        
//Zeilenweises auslesen
while(($row = fgetcsv ($handle, 1000, ",")) !== FALSE ){
    //Prüfen ob die Zeile der Header ist und ggf ein Header-Array erstellen
    if($headerFlag){
        $header = $row;
        $headerFlag = false;
    //Ansonsten die Zeile mit dem Header las Index in den Daten-Array schreiben        
    }else{
        $data[] = array_combine($header, $row);
    }
}
fclose ($handle);

// -----Anwendungsbeispiele -----
//Mögliche Ausgabe als Tabelle
echo '<table>';
echo '<tr>';
foreach($header as $item){
    echo "<th>{$item}</th>";
}
echo '<tr>';
foreach($data as $row){
    echo '<tr>';
    foreach($row as $item){
        echo "<td>{$item}</td>";
    }
    echo '<tr>';
}
echo '</table>';

//Direkter Zugriff auf das Feld 'Asset Number' der ersten Daten-Zeile
echo '<hr>';
echo $data[0]['Asset Number'];

//Ausgabe aller Zeilen bei denen die 'Asset Number' 105023 ist
echo '<hr>';
foreach($data as $row){
    if($row['Asset Number'] == 105023){
        var_dump($row);
    }
}

?>
 
Zurück