0

\我正在从 CSV 文件生成 SQL 文件,但有一些带有斜杠的字符串文件,值如下:

 "aaa", "\", 111, 222, "bbb", "\", 333

“\”之间的值将生成为一个字符串

'\", 111, 222, "bbb", "\', 333

但我希望保持“\”应有的状态,或者将其更改为 NULL,例如:

'NULL', 111, 222, 'bbb', 'NULL', 333

我的代码是这样的:

while (($lineArr = fgetcsv($infile))!=FALSE){
foreach($lineArr as $line){
...
if ($line == '\\"')
$line = 'NULL';
...
}
}

这个剂量不起作用。我认为$line =='\\"'是不正确的,但我不知道如何处理“\”之间的整个部分。

解决方案:我先把数组改成字符串处理'"\"',然后再改回数组做进一步处理。

while (($lineArr = fgetcsv($infile))!=FALSE){
$string = implode(",", $lineArr);
    if (strpos($string,',\",')){
        $sKeepSlash = str_replace(',\",', ",NULL,", $string);
        $pLineArr = explode(',', $sKeepSlash);
    }
    foreach($lineArr as $line){
    ...
}
}
4

2 回答 2

1

用来fputcsv() 写,fgetcsv() 用来读。

在这里找到:为 CSV 转义

于 2013-10-09T10:08:54.930 回答
0

首先找到斜线的位置。例如,您可以使用array_keys

这将返回标记的位置。然后你可以用它来组合

$marker_positions = array_keys($array, "marker");
for ($position = $marker_positions[0]+1; $position < $marker_positions[0]; $position++) {
    $single_string .= $array[$position];
}
于 2013-10-09T13:02:46.137 回答