使用SplFileObject转换CR换行符

时间:2013-08-28 08:36:18

标签: php line-breaks

我写一个类而不是扩展SplFileObject来打开一个CSV并具有一个关联数组。它是有效的,但如果csv文件使用CR换行符则不行。

我知道你可以像这样转换字符串换行符:

$string = str_replace($this::CRLF, $string::LF, $file);
$string = str_replace($this::CR, $string::LF, $file);

但我想知道如何在构造函数中转换换行符。

我如何创建文件:

$file = new CSVFile(__DIR__ . '/../../Resources/data/myfile.csv');

类CSVFile.php

use \SplFileObject;

class CSVFile extends SplFileObject
{
    private $keys;    

    public function __construct($file)
    {
        parent::__construct($file);
        $this->setFlags(SplFileObject::READ_CSV);
    }

    public function rewind()
    {
        parent::rewind();
        $this->keys = parent::current();
        parent::next();
    }

    public function current()
    {
        return array_combine($this->keys, parent::current());
    }

    public function getKeys()
    {
        return $this->keys;
    }

}

2 个答案:

答案 0 :(得分:5)

不太确定你想做什么,但你试过这个吗? ini_set('auto_detect_line_endings',true);

答案 1 :(得分:0)

我能想到这样做的唯一方法(希望有一些我不知道的支持)是读取文件,替换换行符,写入临时文件然后打开临时文件。