我有以下代码从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;
答案 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
,你需要重写你在那里做的事情。