Читать CSV, но создать отдельный массив, содержащий строки, а не многомерный массив? - PullRequest
2 голосов
/ 29 июня 2011

У меня есть файл CSV, и с помощью fgetcsv я могу с радостью генерировать каждую строку в виде массива.

Трубки указывают структуру и деление ячеек, запятые ниже - это запятые, которые являются частью ввода и должны быть сохранены.

abc,456|5hs6|dfdsf,56
abc,456|5hs6|dfdsf,56
abc,456|5hs6|dfdsf,56
abc,456|5hs6|dfdsf,56

Учитывая, что запятые будут использоваться в данных, как показано, было бы лучше разделить, используя каналы.

Array(
[0] => abc,456|5hs6|dfdsf,56
[1] => abc,456|5hs6|dfdsf,56
[2] => abc,456|5hs6|dfdsf,56
[3] => abc,456|5hs6|dfdsf,56
)

Ответы [ 2 ]

4 голосов
/ 29 июня 2011

Если ваш CSV-файл отличается от того, что вы хотите иметь в массиве впоследствии, например, CSV - это что-то вроде

"1","2","3","4","5","6"
"1","2","3","4","5","6"
…

или что-то еще, что фактически требует его анализа с fgetcsv, тогда используйте

$result = array();
while (($line = fgetscsv($handler) !== false) {
  $result[] = implode(',', $line);
}

Если ваш CSV-файл уже содержит то, что вы хотите иметь в массиве впоследствии, например,

1,2,3,4,5,6
1,2,3,4,5,6
…

, тогда вам не нужно анализировать его как CSV (что медленнее), номожет сделать

$result = array();
while (($line = fgets($handler) !== false) {
  $result[] = $line;
}

или просто использовать $array = file('filename.csv')

Разница в том, что a) неявно предполагается, что csv-source использует , в качестве разделителя, потому что мы простовозьмите их так, как они указаны в файле, и b) он не удалит вложения (вы можете заключить значение в ", чтобы избежать, если , внутри него рассматривается как разделитель csv), но это выглядит простополезно здесь.

3 голосов
/ 29 июня 2011

Я не уверен, что это то, что вы хотите, но

$lines = file("filename.csv");

поместит каждую строку filename.csv в $lines (как строку).

...