好吧,你好社區。我在PHP中使用CSV解碼器工作(是的,我知道已經有一個,但作爲我的挑戰,因爲我在空閒時間學習)。現在的問題是:行被拆分爲PHP_EOL
。用分號分割不被引號包圍
在這一行:
foreach(explode($sep, $str) as $line) {
其中月是其將向上行和STR我想解碼字符串變量。
但是,如果我想用分號分隔列,那麼可能會出現分號只包含一列的情況。當我研究這個問題是由報價跡象像這樣整列周圍的解決:
輸入:
"0;0";1;2;3;4
預期輸出:
0; 0 | 1 | 2 | 3 | 4
我已經想到了超前/後視。但是,因爲我以前沒有使用它,也許這可能是一個很好的做法,我不知道如何將它包含在正則表達式中。我的解碼函數返回一個二維陣列(如表...),我想加入行這樣的陣列(是的,正則表達式是f ***編向上...)的:
$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;
}
提前感謝!
在想着同樣的方法,以避免正則表達式,也是一個數組的步行路程將是很好,解析'0;和0'沒有它作爲字符串,但作爲一個數組。 – Gntem
@ Mr.Phoenix我還沒有使用過正則表達式,這裏我使用了一個'PHP'的內置函數。 –
它適用於$ string。但是當從雙引號改爲單引號時:$ string =「'0; 0'; 1; 2; 3; 4」;它失敗了。 –