【发布时间】:2017-09-11 15:03:25
【问题描述】:
好吧,你好社区。我正在用 PHP 编写一个 CSV 解码器(是的,我知道已经有一个,但对我来说是一个挑战,因为我在空闲时间学习它)。现在的问题是:好吧,行被PHP_EOL 分开。
在这一行:
foreach(explode($sep, $str) as $line) {
其中 sep 是拆分行的变量,而 str 是我要解码的字符串。
但如果我想用分号分隔列,可能会出现分号是一列内容的情况。正如我研究的那样,这个问题是通过用这样的引号包围整个列来解决的:
输入:
"0;0";1;2;3;4
预期输出:
0;0 | 1 | 2 | 3 | 4
我已经想到了前瞻/后瞻。但由于我过去没有使用它,也许这可能是一个很好的做法,我不知道如何将它包含在正则表达式中。我的解码函数返回一个二维数组(就像一个表......),我想像这样向数组添加行(是的,正则表达式被搞砸了......):
$res[] = preg_split("/(?<!\")". preg_quote($delim). "(?!\")/", $line);
最后是我的完整代码:
function csv_decode($str, $delim = ";", $sep = PHP_EOL) {
if($delim == "\"") $delim = ";";
$res = [];
foreach(explode($sep, $str) as $line) {
$res[] = preg_split("/(?<!\")". preg_quote($delim). "(?!\")/", $line);
}
return $res;
}
提前致谢!
【问题讨论】:
标签: php regex csv pcre decoder