2016-04-05 5 views
0

Ich bin mir nicht sicher, wie ein exaktes Element (wie Spalte 5, Zeile 3) einer CSV-Datei in PHP zu drucken. Ich habe eine CSV-Datei mit 3 Spalten: ID, Kosten, Standort. Ich muss nach der ID suchen, die ich tun kann, und ich kann sogar zurückgeben, welche Zeilennummer es ist. Aber wie kann ich dann die Spalte 3 dieser Zeile ausdrucken? Der folgende Code gibt die Zeilennummer aus, in der $ interior gefunden werden kann.So drucken Sie ein exaktes Element (in Spalte und Zeile) einer CSV-Datei in PHP

$lines = file('database.csv'); 
$line_number = false; 

while (list($key, $line) = each($lines) and !$line_number) { 
    $line_number = (strpos($line, $interior) !== FALSE); 
} 
if($line_number){ 
$search = $interior; 
$line_number = false; 
if ($handle = fopen("database.csv", "r")) { 
    $count = 0; 
    while (($line = fgets($handle, 4096)) !== FALSE and !$line_number) { 
    $count++; 
    $line_number = (strpos($line, $search) !== FALSE) ? $count : $line_number; 
    } 
    fclose($handle); 
} 
echo $line_number; 
+0

[str_getcsv] (http://php.net/manual/en/function.str-getcsv.php) ist dein Freund. – ccKep

+0

@AndyE Wenn eine der Antworten richtig oder hilfreich ist, sollten Sie die Antwort mit der Taste "V" neben der Antwort aktualisieren und/oder als korrekt markieren. – Andreas

Antwort

0

Wenn

$lines = file('database.csv'); 

Sie gaben die Zeilen in einem Array dann:

$line = explode(",", $lines[2]); 

finden Sie eine Reihe von jedem elemet von geben Zeile 3 (beachten Sie die zwei (+1) in der Zeilenvariablen).

So ...

Echo $line[4]; 

Wird die dritte Zeile und fünften Spalte von database.csv

+0

'$ lines' wird 0-indiziert, daher überprüft Ihr Code die 4. Zeile. Außerdem: Wenn eine der Spalten ein Komma enthalten kann, ist Ihre 'explode' geschraubt. Ich empfehle, [str_getcsv] (http://php.net/manual/en/function.str-getcsv.php) anstelle von explode zu verwenden. Es ist im Grunde dasselbe, außer dass Sie bestimmte Parameter einstellen können (umschließende Zeichen, Feldtrennzeichen usw.). – ccKep

+0

Richtig ... es ist immer noch Morgen. – Andreas

+0

@ccKep hat es jetzt korrigiert. – Andreas

0

Sie die Position aller Komma finden (wie CSV-Datei), dann auf der Grundlage der strpos($line, $search) dieser Rückkehr Funktion können Sie die column.But entscheiden können, ob alle Ihre Spalte Komma enthalten wird, wird diese Logik Scheitern. Suchen Sie in diesem Fall die Positionen ", (vorausgesetzt, Ihre Spalte wird mit einem doppelten Anführungszeichen zitiert). Sie können es in Ihrem while-Schleife setzen:

$searchStr = "CA" ; 
$mystr = "5,50.00,CA"; 
$myArr = explode(",",$mystr); 
foreach($myArr as $k=>$v) 
{  
    if($v == $searchStr) 
     echo "Column :". $k; 
} 
+0

Ok ich bin immer noch ein wenig verwirrt. Wenn ich weiß, dass ich Spalte 2, Zeile 3 meiner CSV-Datei drucken möchte, wie könnte ich das tun? – AndyE

+0

können Sie es tun, 2-Wege..Etwa explodieren Sie die Zeichenfolge auf der Grundlage von "Komma" & dann suchen Sie Ihre "Suche" -Muster.Wenn Sie abgestimmt haben, können Sie es zeigen. Eine andere Möglichkeit ist, wenn Ihre strpos() die Position zurückgibt, werden Sie überprüfen, ob diese Position größer ist als die Position des Kommas. –

0

sein Da diese Frage eine vollständige (non-breaking) Antwort fehlt:

können Sie Verwenden Sie einfach str_getcsv in jeder Zeile Ihres csv und speichern Sie die Ergebnisse in einem Array:

$lines = file('database.csv'); 
$data = array(); 
foreach($lines as $line) 
{ 
    // if your CSV uses a different delimiter or you enclose your fields with a different character than " alter the following line according to the php docs of str_getcsv 
    $data[] = str_getcsv($line); 
} 

// get row 3, column 5: 
echo $data[2][4]; 
Verwandte Themen