0

各行の配列を生成する fgetcsv() を使用して、CSV ファイルからデータをインポートしています。次に、この配列を implode() し、mysql_real_escape_string() を使用して、mysql クエリで使用する文字列を作成します。最終的には次のようになります。

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

私が読んでいるCSVファイルの中には、最大200以上の列があるものがあります(ばかげていますが、本当です)。そのため、挿入ステートメントが非常に長くなります。それほど長くないようにするために、insert ステートメント内のスペースや空白を取り除きたいと思います。したがって、上記のステートメントは次のようになります。

\"2342352353\",,

だから私はこれを解決する2つの方法を探しています。まず、配列を調べて、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);

2 番目のアプローチは、配列のウォークスルーをスキップし、正規表現を使用して出現する を削除することです\" \"が、区切り引用符の途中に任意の数のスペースが存在する可能性があります。

私の質問は何よりもまず、正規表現を使用してこれを行うにはどうすればよいですか? そして第二に、どちらの方法がより速いでしょうか?

正規表現の回答が得られたら、ベンチマークを行い、結果を更新します。

ありがとう!

4

1 に答える 1

0

この正規表現はどうですか?

\\"\s*\\"

上記のコードで使用:

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

は、\s*任意の数の空白文字に一致します。

そして、正規表現がCSVファイルを反復処理するよりも遅かったら、私は帽子をかぶるでしょう...

于 2012-05-24T16:55:17.090 に答える