fgetcsv将第一行中的所有数据都带入

时间:2015-05-27 14:43:53

标签: php csv encoding fgetcsv

使用fgetcsv是我发现读取系统所需的csv文件的选项。但它似乎每次都不起作用(实际上,当这段代码工作时非常罕见)。

Flight.equals

我尝试通过在代码之前调用它来检查行结束,但没有太大成功。

if (($handle = fopen($file, 'r')) !== FALSE) {
    set_time_limit(0); // necessary if a large csv file

    $row = 0;
    while (($data = fgetcsv($handle, 0, ',')) !== FALSE) {
        print_r($data);
        // .. here I do some stuff with the data
        // .. The result should be an array with 5 columns and it run multiple times (for the amount of lines in the file)
        // .. The result however is one array with a over 9000 columns (really over 9000, it's 9489 in the file that I'm testing)
    }
    fclose($handle);
    die();
}

该文件由客户端由另一个程序导出,我无法“更新”以满足软件的需要。有没有办法在csv上处理这个ini_set('auto_detect_line_endings', true); / encoding问题?

1 个答案:

答案 0 :(得分:0)

来自PHP Manual(我知道的激进想法)

  

长度参数

     

必须大于CSV文件中的最长行(以字符为单位)(允许尾随行尾字符)。它在PHP 5中成为可选项。省略此参数(或在PHP 5.1.0及更高版本中将其设置为0),最大行长度不受限制,这稍微慢一点。

我不知道您正在使用的PHP版本,但尝试将参数设置为合理的,您应该一次开始获得一行。

例如

while (($data = fgetcsv($handle, 4096, ',')) !== FALSE) {