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

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

Ответ 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);
    }
?> 

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

Ответ 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;
 }