1

データベースの結果セットから値を読み取り、それらを配列に押し込み、CSVファイルに書き込むphpコードがあります。CSVファイルに入るときに、各値を二重引用符で囲むように強制する必要がありますが、これを行う方法を一生思い出せません。

これがファイルに書き込むループです(これは実際には各行を通過する別のループに含まれています。私が示しているこのループは現在選択されている行の列を通過します):

foreach ($row as $key => $val){

    $newrow[$key] = preg_replace("(\r\n|\n|\r|\t)", "", $val);

}

fputcsv($ fp、$ newrow);

必要なのは、$ valの値をファイルに書き込むときに、二重引用符で囲むことです。今のところ、私が得た結果は次のようになります。

554,702180,25.00,6FYAK0,9090909090909090

私が必要なのはこれです:

"554","702180","25.00","6FYAK0","9090909090909090"

誰かが私の脳をジャンプスタートできますか?

4

5 に答える 5

3

fputscsvPHPサイトのコマンドヘルプをご覧ください:http: //php.net/manual/en/function.fputcsv.php

4番目のパラメーターは、エンクロージャー文字を指定します。これはあなたが探しているものですか?ただし、私が理解していることから、CSVプットには、フィールド自体に含まれる区切り文字または囲み文字のいずれかのために、フィールドで必要な場合にのみ引用符が含まれます。

于 2010-11-01T19:54:38.720 に答える
3

私は次の代わりに関数を使用しますfputscsv

function my_fputcsv($handle, $fieldsarray, $delimiter = ",", $enclosure ='"'){
    $glue = $enclosure . $delimiter . $enclosure;
    return fwrite($handle, $enclosure . implode($glue,$fieldsarray) . $enclosure);
}
于 2010-11-01T21:51:09.353 に答える
2

これは簡単な修正ですが、機能します。

$value = '554,702180,25.00,6FYAK0,9090909090909090';

$new_value = '"' . implode('","', explode(',', $value)) . '"';

echo $new_value;
于 2010-11-01T19:53:32.110 に答える
0

十分に単純なようです:

 $newrow[$key] = '"' . preg_replace("(\r\n|\n|\r|\t)", "", $val) . '"';
于 2010-11-01T19:48:32.477 に答える
-1

を使用せずに書き込みたいfputscsv場合は、次のような関数を使用して、ファイルに書き込む行を生成できます。

function csvify ($array)
{
   $temp = "";
   $counter = 0;
   foreach ($array as $element)
   {
      if ($counter > 0)
         $temp = $temp . ",";
      $counter ++;
      $temp = $temp . "\"$element\"";
   }
   return $temp;
}
于 2010-11-01T20:07:51.913 に答える