Как импортировать CSV файлы с помощью zend framework? Должен ли я использовать zend_file_transfer или есть специальный класс, который я должен изучить? Также, если я использую zend_file_transfer, есть ли какой-либо специальный валидатор для CSV?
Как импортировать CSV, используя zend
Ответ 1
вам не нужно использовать любые 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);
}
Ответ 2
Вы также можете использовать 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);
}
?>
Ответ 3
В настоящее время нет способа сделать это с помощью Zend Framework. Как можно быть уверенным?
Например, Zend_Translate поддерживает перевод с CSV файлами, но если вы проверите исходный код соответствующего адаптера (Zend_Translate_Adapter_Csv), вы можете проверить, использует ли он fgetcsv, а не конкретный класс Zend. Кроме того, этот адаптер CSV поставляется со следующим предупреждением:
Примечание. Помните, что адаптер Csv имеет проблемы, когда ваши файлы Csv кодируется иначе, чем язык настройки вашей среды. Это из-за ошибки самого PHP, которая не следует исправлять до PHP 6.0 (Http://bugs.php.net/bug.php?id=38471). Поэтому вы должны знать, что Csv Адаптер из-за ограничений PHP не знание локали.
который связан с проблемами функции fgetcsv.
Ответ 4
Здесь функция, которая читает файл 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;
}