2011-11-11 6 views
2

私は、サーベイからCSVへのデータをエクスポートしています。これは、PHPで別のチームが使用するためです。私はすべての見出しとしてデータの最初の行を出力しました。しかし、私は2つの列にまたがる見出しのいくつかが必要です。PHP CSVカラム見出し

見出しはすべて正しく入っていますが、いくつかの見出しの下に2つのデータセルを追加する必要があります。

header('Content-Type: text/csv; charset=utf-8'); 
header('Content-Disposition: attachment; filename=lite-survey-data_'.time().'.csv'); 

require_once (dirname(dirname(dirname(dirname(__FILE__)))).'/wp-load.php'); 

$content =build_csv_download(); 
$headings = convert_to_csv($content[0]); 
$csv_content = convert_to_csv($content[1]); 
$output = fopen('php://output', 'w'); 
fwrite($output, $headings); 
fwrite($output, $csv_content); 

答えて

0

CSVは列スパニングをサポートしていません。 Excelのようないくつかのプログラムは見出しや他のそのようなトリックの意味を理解しようとするかもしれませんが、有効なCSVファイルは残されません。 http://tools.ietf.org/html/rfc4180

CSVデータを作成する前に、意味のない文字列(スペースやハイフンなど)でデータを連結します。基本的には、2つのデータ列を取り出して1つにするだけです。

これを行う最も簡単な方法は、右のデータベースから刺さを組み合わせることCONCATdocs)を使用することです:

SELECT 
     id, 
     CONCAT(first_name, " " last_name) AS name, 
     email 
    FROM 
     users 

/* Gives these results: 
    Array 
    (
     [0] => Array 
      (
       [id] => 1 
       [name] => Bob Someuser 
       [email] => [email protected] 
      ) 

     [1] => Array 
      (
       [id] => 2 
       [name] => George Anotheruser 
       [email] => [email protected] 
      ) 

    ) 
*/ 

データベース・クエリで、あなたが使用できることを行うことができない場合array_walkdocs)は事実の後にそれを行う:

$headings = array(
    'First heading', 
    'Second heading', 
    'Third heading' 
); 

$one_data = array(
    'First data', 
    'Second', 
    'data', 
    'Third data' 
); 
$data = array(); 
for ($x=0;$x<10;$x++) 
    $data[] = $one_data; 

print 'Before fix:'; 
print_r($data); 

function prepare_array (&$item) { 
    $item[1] = $item[1].' '.$item[2]; 
    unset($item[3]); 
} 
array_walk($data, "prepare_array"); 

print '<br><br>After fix:'; 
print_r($data); 

function csv_array (&$item) { 
    $item = implode(',', $item); 
} 
$csv = implode(',', $headings)."\n"; 
array_walk($data, "csv_array"); 
$csv .= implode("\n", $data); 

print '<br><br>CSV:<br>'.$csv; 
1

CSVは、マージされたセルを表すことができない基本形式なので、2つの列にまたがる見出しを持つことはできません。しかし、2つの列のうち2番目の列にヘッダーがない場合(heading,,nextheading)、Excelで開くとheadingが空のセルに広がります。

+0

これは私が探している答えかもしれない。私は時にはプリミティブな.csvがどのようにできるかを忘れています。今すぐ試してみてください。しかし、提案のための乾杯。 – David

0

CSVは列スパニングをサポートしていないので、2つの列の上に同じフィールドヘッダーを置くだけで済みます。これは世界で最も美しいものではありませんが、CSVは世界でも最も柔軟なフォーマットではありません。

関連する問題