我写一个类而不是扩展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;
}
}
答案 0 :(得分:5)
不太确定你想做什么,但你试过这个吗? ini_set('auto_detect_line_endings',true);
答案 1 :(得分:0)
我能想到这样做的唯一方法(希望有一些我不知道的支持)是读取文件,替换换行符,写入临时文件然后打开临时文件。