как импортировать CSV, используя zend

Как импортировать файлы CSV с использованием zend framework? Должен ли я использовать zend_file_transfer или есть специальный класс, который я должен изучить? Также, если я использую zend_file_transfer, есть ли какой-либо специальный валидатор для CSV?

вам не нужно использовать любые zend-библиотеки для импорта файлов csv, вы можете просто использовать собственные функции php, взгляните на fgetcsv

 $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 для чтения файлов CSV.

Из руководства по php:

 <?php $file = new SplFileObject("animals.csv"); $file->setFlags(SplFileObject::READ_CSV); foreach ($file as $row) { list($animal, $class, $legs) = $row; printf("A %s is a %s with %d legs\n", $animal, $class, $legs); } ?> 

http://php.net/manual/en/splfileobject.fgetcsv.php

В настоящее время нет способа сделать это с помощью Zend Framework. Как можно быть уверенным?

Например, Zend_Translate поддерживает перевод с CSV-файлами, но если вы проверите исходный код соответствующего адаптера ( Zend_Translate_Adapter_Csv ), вы можете проверить, что он использует fgetcsv , а не определенный класс Zend. Кроме того, этот адаптер CSV поставляется со следующим предупреждением:

Примечание. Помните, что у Csv Adapter возникают проблемы, когда ваши файлы Csv кодируются иначе, чем настройки локали вашей среды. Это связано с ошибкой самого PHP, которая не будет исправлена ​​до PHP 6.0 (http://bugs.php.net/bug.php?id=38471). Поэтому вы должны знать, что адаптер Csv из-за ограничений PHP не является локальным.

что связано с проблемами функции fgetcsv .

Вот функция, которая читает файл csv и возвращает массив элементов, которые содержат первые два значения данных столбца.

Эта функция могла бы читать файл first_name, last_name, например.

 function processFile ($filename) { $rtn = array(); if (($handle = fopen($filename, "r")) !== FALSE) { while (($data = fgetcsv($handle, 1000, ",")) !== FALSE) { $item = array(); $item[] = $data[0]; $item[] = $data[1]; $rtn[] = $item; } } return $rtn; }