4

を使用してデータをCSVファイルにエクスポートしていますfputcsv。書き込まれている文字列がありますが、データを二重引用符で囲む必要があります。

foreach ($orderDetails['lines'] as $line) {
     fputcsv($orderImportCsv, $line);
}

これにより、エディターで開くと次のようになります(崇高)

L、M3344、、100

L、M3356、、50

これらの各フィールドを二重引用符で囲む必要があります。

だから私はこれを試しました:

foreach ($lines as &$line) {
    foreach ($line as &$column) {
        $column = '"' . $column . '"';
    }
}

したがって、基本的に、これは各行のフィールドを通過し、「」でラップする必要があります。ただし、それを実行すると、次の出力が得られます。

"" "L" ""、 "" "M3344" ""、 "" "" ""、 "" "100" ""

"" "L" ""、 "" "M3356" ""、 "" "" ""、 "" "50" ""

これで、変数の前後に2セットの二重引用符が配置されます。

これを行うためのより良い方法はありますか?

アップデート

fputcsvは2つのオプションのパラメータがあることを知っています。区切り文字とエンクロージャ。ただし、エンクロージャーのデフォルトは「」であると思いますが、文字列が別々の単語に分割されている場合に限ります。

4

3 に答える 3

6

エンクロージャーは自分で挿入するため、PHPに何も使用しないように指示する必要があります。それを行うための文書化された方法はないようですが、スペースを使用することはうまくいくようです:

<?php
foreach($orderDetails['lines'] as $line){
    foreach ($line as &$column) {
        $column = '"' . $column . '"';
    }
    unset($column);

    fputcsv($orderImportCsv, $line, ',', ' ');
}

または、fputcsv()を避けて、すべてを自分で作成することもできます。

于 2013-02-28T11:24:19.157 に答える
1

すべてのフィールドに引用符が必要な場合はfputcsv、十分ではありません。恐れ入ります。必要と思われるフィールド(つまり、スペースやコンマなどがあるフィールド)の前後に引用符を付けるだけです。

fputcsvPHPはこれらの引用符をフィールド値の一部と見なし、(さらに引用符を追加して)エスケープする必要があるため、引用符を値に追加して強制する試みは機能しません。

すべてのフィールドに引用符を強制するには、CSVレコードを手動で生成する必要があります。このような何かがトリックを行う必要があります:

$quoteCSV = function($field) {
    return '"'.$field.'"';
}

foreach ($lines as $line) {
    fputs($file, implode(',',array_walk($field, $quoteCSV)));
}

注:1。ラムダ関数を使用しているため、このコードにはPHP5.3以降が必要です。2.エスケープする方法を指定しなかったため、実際に引用符を含むフィールドを処理しようとはしていません。上記のコードは、データのいずれかに引用符が含まれている場合、壊れたCSVファイルを生成します。必要に応じて修正するのはあなたにお任せします。

お役に立てば幸いです。

ただし、すべてのフィールドに引用符を追加する必要があるのは非常に珍しいことです。CSVファイルとして認識されますが、CSVを生成するほとんどのプログラムは、PHPが行うことを実行し、必要な場合にのみ引用符を追加します。そして、CSVファイルを読み取るこれまでに出会ったほとんどすべてのプログラムは、その配置に完全に満足しています。この要件が存在する理由を再確認する価値があるかもしれません-それはあなたがあなたの側ですべきことではなく、反対側のソフトウェアの問題のように聞こえます。

于 2013-02-28T11:24:58.427 に答える
-1

これはごく普通のことです。Excelを使用してCSVファイルを作成し、1つのセルを二重クォータで囲むと、次のように他のセルがソースファイルに追加されます。

これは、CSVがMicrosoft OfficeExcel2007でどのように表示されるかを示しています。

"
""
"""
""""
"""""

ソースコード:

"""",
"""""",
"""""""",
"""""""""",
"""""""""""",

ドキュメントの最初の例を見るとわかるように、その後は何も問題はありません。

<?php

$list = array (
    array('aaa', 'bbb', 'ccc', 'dddd'),
    array('123', '456', '789'),
    array('"aaa"', '"bbb"')
);

$fp = fopen('file.csv', 'w');

foreach ($list as $fields) {
    fputcsv($fp, $fields);
}

fclose($fp);
?> 

上記の例では、file.csvに次のように書き込みます。

aaa,bbb,ccc,dddd
123,456,789
"""aaa""","""bbb"""
于 2013-02-28T11:33:36.797 に答える