0

私が使用fputcsvしているのは、入力テキストタイプの値を引用符で囲むことだけです。これをオーバーライドして、すべての人に引用符を強制するか、すべて一緒に削除する方法はありますか?試しfputcsv($fp, $data, ',', '"');ましたが、うまくいきませんでした

$data = array_values($_POST);
if( $fp = fopen('data.csv', 'a+') ){
    fputcsv($fp, $data);
}
fclose($fp);

csvデータの例: "user"、 "city"、yes、no、10001

4

1 に答える 1

1

スペースを追加して各エントリを強制的に引用し、ストリーム フィルタを使用してそのスペースを削除してから、.csv に書き込むことができます。

/* Function to append a space to each element in the array */
function addSpace(&$var, $key){ $var .= ' '; }

/* Filter class to remove the space previously appended */
class space_filter extends php_user_filter {
  function filter($in, $out, &$consumed, $closing)
  {
    while ($bucket = stream_bucket_make_writeable($in)) {
      $bucket->data = str_replace(' "', '"', $bucket->data);
      $consumed += $bucket->datalen;
      stream_bucket_append($out, $bucket);
    }
    return PSFS_PASS_ON;
  }
}

/* Register filter */
stream_filter_register("filterspace", "space_filter");

$arr = array("user","city","yes","no","10001"); // your array

/* use addSpace on each element in the array */
array_walk($arr, "addSpace");

if( $fp = fopen('data.csv', 'a+') ){
    stream_filter_append($fp, "filterspace"); // Remove space 
    fputcsv($fp, $arr);
}
fclose($fp);    

結果: "user","city","yes","no","10001"

私は好奇心からこれを書きました。おそらく、これを重要なことに使用しないでください。

于 2012-08-18T06:34:53.993 に答える