我已经看到多个线程,关于自动检测传入CSV的分隔符的最佳解决方案.它们中的大多数是长度在20-30行之间的函数,多个循环预定的分隔符列表,读取前5行和匹配计数e.t.c e.t.c
我刚刚实施了这个程序,只做了一些修改.工作出色.
然后我找到了以下代码:
private function DetectDelimiter($fh)
{
$data_1 = null;
$data_2 = null;
$delimiter = self::$delim_list['comma'];
foreach(self::$delim_list as $key=>$value)
{
$data_1 = fgetcsv($fh, 4096, $value);
$delimiter = sizeof($data_1) > sizeof($data_2) ? $key : $delimiter;
$data_2 = $data_1;
}
$this->SetDelimiter($delimiter);
return $delimiter;
}
这对我来说看起来像是在实现SAME结果,其中$delim_list是一个分隔符数组,如下所示:
static protected $delim_list = array('tab'=>"\t",
'semicolon'=>";",
'pipe'=>"|",
'comma'=>",");
任何人都可以解释为什么我不应该这么简单地做到这一点,为什么到处都是我看起来更复杂的解决方案似乎是公认的答案?
谢谢!