So extrahieren Sie Daten aus einer CSV-Datei in PHP

Lesezeit: 4 Minuten

So extrahieren Sie Daten aus einer CSV Datei in PHP
lysd

Ich habe eine csv-Datei, die so aussieht

$lines[0] = "text, with commas", "another text", 123, "text",5;
$lines[1] = "some without commas", "another text", 123, "text";
$lines[2] = "some text with commas or no",, 123, "text";

Und ich hätte gerne einen Tisch:

$t[0] = array("text, with commas", "another text", "123", "text","5");
$t[1] = array("some without commas", "another text", "123", "text");
$t[2] = array("some text, with comma,s or no", NULL , "123", "text");

Wenn ich benutze split($lines[0],",") Ich werde bekommen "text" ,"with commas" ...
Gibt es da eine elegante Möglichkeit?

  • Verwenden explode anstatt split

    – Johannes Rasch

    10. Mai 2010 um 18:40 Uhr

  • Verwenden Sie ein für diesen Zweck entwickeltes Tool (z fgetcsv um nur einen zu nennen) statt explode

    – Salat

    10. Mai 2010 um 18:59 Uhr

  • Eine Methode (fgetcsv ist jedoch besser) besteht darin, benachbarte Felder zu verbinden, bis das zusammengeführte Feld in einem Anführungszeichen endet, wenn das Feld mit einem Anführungszeichen beginnt …

    – Gert van den Berg

    17. Mai 2018 um 8:11 Uhr

1646921646 228 So extrahieren Sie Daten aus einer CSV Datei in PHP
Matt

Sie können verwenden fgetcsv um eine CSV-Datei zu parsen, ohne sich darum kümmern zu müssen, sie selbst zu parsen.

Beispiel aus dem PHP-Handbuch:

$row = 1;
if (($handle = fopen("test.csv", "r")) !== FALSE) {
    while (($data = fgetcsv($handle, 1000, ",")) !== FALSE) {
        $num = count($data);
        echo "<p> $num fields in line $row: <br /></p>\n";
        $row++;
        for ($c=0; $c < $num; $c++) {
            echo $data[$c] . "<br />\n";
        }
    }
    fclose($handle);
}

  • Gibt es eine ähnliche Funktion für eine Linie?

    – lysd

    10. Mai 2010 um 18:45 Uhr

  • Jawohl, fgets bekommt eine ganze Zeile.

    – Mitch Dempsey

    10. Mai 2010 um 18:45 Uhr

  • @liysd – Ja, Sie können eine Zeichenfolge an übergeben str_getcsv, dies ist jedoch nur in PHP 5.3+ verfügbar. Der Kommentarbereich hat jedoch einen Ersatz.

    – Matt

    10. Mai 2010 um 18:48 Uhr


  • Ich meine, eine Zeile wird eingegeben, kein Dateihandle

    – lysd

    10. Mai 2010 um 18:48 Uhr

  • Bei neuen Versionen kann für die Sekunde “0” übergeben werden (optionaler Parameter), für unbegrenzte Zeilenlänge

    – Gert van den Berg

    17. Mai 2018 um 8:13 Uhr

1646921646 765 So extrahieren Sie Daten aus einer CSV Datei in PHP
Gordon

Zusätzlich zu Matts Vorschlag können Sie auch verwenden SplFileObject in die Datei einlesen:

$file = new SplFileObject("data.csv");
$file->setFlags(SplFileObject::READ_CSV);
$file->setCsvControl(',', '"', '\\'); // this is the default anyway though
foreach ($file as $row) {
    list ($fruit, $quantity) = $row;
    // Do something with values
}

Quelle: http://de.php.net/manual/en/splfileobject.setcsvcontrol.php

Hier ist auch eine einfache Methode, um eine gelesene CSV-Datei zu erhalten.

$sfp = fopen('/path/to/source.csv','r'); 
$dfp = fopen('/path/to/destination.csv','w'); 
while ($row = fgetcsv($sfp,10000,",","")) { 
 $goodstuff = ""; 
 $goodstuff = str_replace("¦",",",$row[2]); 
 $goodstuff .= "\n"; 
 fwrite($dfp,$goodstuff); 
} 
fclose($sfp); 
fclose($dfp);

Mit der folgenden Funktion können Sie die Daten auslesen.

  function readCSV() {
    $csv = array_map('str_getcsv', file('data.csv'));
    array_shift($csv); //remove headers


}

http://www.pearlbells.co.uk/how-to-sort-a1a2-z9z10aa1aa2-az9az10-using-php/

Vielleicht löst mein Code dein Problem:

// Parse all content from csv file and generate array from line.
function csv_content_parser($content) {
  foreach (explode("\n", $content) as $line) {
    // Generator saves state and can be resumed when the next value is required.
    yield str_getcsv($line);
  }
}
// Get content from csv file.
$content = file_get_contents('your_file.csv');
// Create one array from csv file's lines.
$data = array();
foreach (csv_content_parser($content) as $fields) {
  array_push($data, $fields);
}

Als Ergebnis haben Sie ein Array mit allen Werten aus CSV. Es wäre so etwas wie:

Array
(
    [0] => Array
        (
            [0] => text, with commas
            [1] => another text
            [2] => 123
            [3] => text
            [4] => 5
        )

    [1] => Array
        (
            [0] => some without commas
            [1] => another text
            [2] => 123
            [3] => text
        )

    [2] => Array
        (
            [0] => some text, with comma,s or no
            [1] =>  NULL 
            [2] => 123
            [3] => text
        )

)

1646921646 954 So extrahieren Sie Daten aus einer CSV Datei in PHP
Stich

Angenommen, Sie haben eine Funktion für dieselben Dinge erstellt, dann sollte es so aussehen

function csvtoarray($filename="", $delimiter){

    if(!file_exists($filename) || !is_readable($filename)) return FALSE;
    $header = NULL;
    $data = array();

    if (($handle = fopen($filename, 'r')) !== FALSE ) {
        while (($row = fgetcsv($handle, 1000, $delimiter)) !== FALSE)
        {   
            if(!$header){
                $header = $row;
            }else{
                $data[] = array_combine($header, $row);
            }
        }
        fclose($handle);
    }
    if(file_exists($filename)) @unlink($filename);

    return $data;
}

$data = csvtoarray('file.csv', ',');

print_r($data);

So extrahieren Sie Daten aus einer CSV Datei in PHP
Emil M

Du könntest so etwas verwenden https://github.com/htmlburger/carbon-csv das ermöglicht die Spaltenzuordnung:

$csv = new \Carbon_CSV\CsvFile('path-to-file/filename.csv');
$csv->set_column_names([
    0 => 'first_name',
    1 => 'last_name',
    2 => 'company_name',
    3 => 'address',
]);
foreach ($csv as $row) {
    print_r($row);
}

Das Ergebnis des folgenden Codes würde etwa so aussehen:

Array
(
    [0] => Array
        (
            [first_name] => John
            [last_name] => Doe
            [company_name] => Simple Company Name
            [address] => Street Name, 1234, City Name, Country Name
        )
    [1] => Array
        (
            [first_name] => Jane
            [last_name] => Doe
            [company_name] => Nice Company Name
            [address] => Street Name, 5678, City Name, Country Name
        )
)

Eine andere Bibliothek, die dasselbe (und noch viel mehr) tut, ist http://csv.thephpleague.com/9.0/reader/

988180cookie-checkSo extrahieren Sie Daten aus einer CSV-Datei in PHP

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy