通过PHP的CSV标头?

时间:2013-12-03 14:43:15

标签: php wordpress csv export-to-csv

我有以下代码从Wordpress中的内容生成CSV文件,但我需要将标题添加到生成的四列中。我在哪里可以定义它们,因为它们将始终是固定名称?

$fileName = 'Optical_test_results.csv';
header("Cache-Control: must-revalidate, post-check=0, pre-check=0");
header('Content-Description: File Transfer');
header("Content-type: text/csv");
header("Content-Disposition: attachment; filename={$fileName}");
header("Expires: 0");
header("Pragma: public");

$fh = @fopen( 'php://output', 'w' );
$arr_query_args = array(
    'numberposts'  => -1,
    'orderby'      => 'post_title',
    'post_type'    => 'page',
    'exclude'      => '24'
);

$arr_posts = get_posts( $arr_query_args );
global $post;

foreach( $arr_posts as $this_post ) { 
    $permalink = get_permalink($this_post->ID);
    $page_number = get_post_meta($this_post->ID, "part_number", true);
    $serial = $this_post->post_title;
    $s1 = get_post_meta($this_post->ID, 'tracking_number', true);
    $s2 = get_the_title($page_number);
    $s3 = $permalink;
    $results = $serial.','.$s1.','.$s2.','.$s3."\r\n";
    echo $results;
    fputcsv($fh);
}


$headerDisplayed = false;
fclose($fh);

exit;

3 个答案:

答案 0 :(得分:2)

您当前的代码没有任何意义 - 您在打开之前写入文件句柄。你写入stdout和文件(它结果也是stdout)并且似乎期望文件包含在输出中。您可以在标题之前将内容发送到浏览器,而不使用输出缓冲。

(在foreach循环之前回答你的问题 - 但这不会解决其他问题)

答案 1 :(得分:1)

您可以像数据行一样使用fputcsv。 csv中的标题和数据没有区别。

fputcsv($fh, array('header 1', 'header 2', 'header 3'));

在你的循环中,你没有正确使用fputcsv

$results = $serial.','.$s1.','.$s2.','.$s3."\r\n";
echo $results;
fputcsv($fh);

应该是

fputcsv($fh, array($serial, $s1, $s2, $s3));

并在循环完成后打开文件。

答案 2 :(得分:0)

$headers = array('Foo', 'Bar', 'Baz');
$data    = array(
               array(1, 2, 3),
               array(4, 5, 6)
           );

$fh = fopen('php://output', 'w');

fputcsv($fh, $headers);
foreach ($data as $row) {
    fputcsv($fh, $row);
}

那是如何使用fputcsv输出CSV数据。标题就像任何其他行一样,您只需先输出它们。你的代码绝对不使用fputcsv,你需要重写你在那里做的事情。