0

我正在使用 fgetcsv() 从 CSV 文件中导入数据,它为每一行生成一个数组。然后我 implode() 这个数组并使用 mysql_real_escape_string() 创建一个字符串以用于 mysql 查询。它最终看起来像这样:

\"2342352353\",\" \",\"\"

我正在阅读的一些 CSV 文件有多达 200 多列(荒谬,但确实如此),因此插入语句变得非常长。为了让它们不那么冗长,我想去掉插入语句中的任何空格或空格。所以,上面的语句应该变成:

\"2342352353\",,

所以我正在寻找两种方法来解决这个问题。首先,我可以遍历数组,并使用 trim() 查找任何带有空格的条目并将它们设为空白。然后我可以像这样对结果字符串执行 str_replace() :

for ($x=0; $x<sizeof($data); $x++) {
    $data[$x] = trim($data[$x]) == ''  ?  ''  :  $data[$x];
}
$insert_string = '\\"' . mysql_real_escape_string(implode('","', $data)) . '\\"';
str_replace('\"\"', '', $insert_string);

第二种方法是跳过遍历数组并仅使用正则表达式删除任何出现的\" \",但在分隔引号的中间可能有任意数量的空格。

我的问题是第一个也是最重要的,我如何使用正则表达式来做到这一点?其次,哪种方式会更快?

一旦我得到正则表达式的答案,我会做一些基准测试并更新结果。

谢谢!

4

1 回答 1

0

这个正则表达式呢?

\\"\s*\\"

在上面的代码中使用:

preg_replace('/\\\"\s*\\\"/', '', $insert_string);

\s*匹配任意数量的空白字符。

如果正则表达式比遍历你的 CSV 文件慢,我会吃掉我的帽子......

于 2012-05-24T16:55:17.090 回答