Как извлечь данные из csv-файла в PHP

У меня есть файл csv, который выглядит так:

$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"; 

И я хотел бы иметь таблицу:

 $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"); 

Если я использую split($lines[0],",") я получу "text" ,"with commas" ... Есть ли какой-нибудь элегантный способ сделать это?

Solutions Collecting From Web of "Как извлечь данные из csv-файла в PHP"

Вы можете использовать fgetcsv для разбора CSV-файла, не беспокоясь о его разборе.

Пример из руководства PHP:

 $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); } 

В дополнение к предложению Мэтта вы также можете использовать SplFileObject для чтения в файле:

 $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 } 

источник: http://de.php.net/manual/en/splfileobject.setcsvcontrol.php

здесь также есть простой способ получить прочитанный csv-файл.

 $ 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);

WebIt4Me / reader предоставляет инструмент для чтения или поиска через файл CSV

Предположим, вы создали функцию для одних и тех же вещей. Тогда это должно выглядеть так:

 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); 

вы можете прочитать данные, используя следующую функцию.

  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/

Вы можете использовать что-то вроде https://github.com/htmlburger/carbon-csv, которое позволяет отображать столбцы:

 $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); } 

Результатом приведенного ниже кода будет что-то вроде:

 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 ) ) 

Другая библиотека, которая делает то же самое (и многое другое), это http://csv.thephpleague.com/9.0/reader/