用一点谷歌你会发现这个:http://www.the-art-of-web.com/php/dataexport/
准备数据
$data = array(
array( "firstname" => "Mary", "lastname" => "Johnson", "age" => 25 ),
array( "firstname" => "Amanda", "lastname" => "Miller", "age" => 18 ),
array( "firstname" => "James", "lastname" => "Brown", "age" => 31 ),
array( "firstname" => "Patricia", "lastname" => "Williams", "age" => 7 ),
array( "firstname" => "Michael", "lastname" => "Davis", "age" => 43 ),
array( "firstname" => "Sarah", "lastname" => "Miller", "age" => 24 ),
array( "firstname" => "Patrick", "lastname" => "Miller", "age" => 27 )
);
第一步是以制表符分隔的格式输出数据(也可以使用 CSV,但稍微复杂一些)。为此,我们使用以下代码:
<?php
header("Content-Type: text/plain");
$flag = false;
foreach( $data as $row ) {
if( !$flag ) {
// display field/column names as first row
echo implode( "\t", array_keys( $row ) ) . "\r\n";
$flag = true;
}
echo implode( "\t", array_values( $row ) ) . "\r\n";
}
exit;
?>
我们将内容类型设置为 text/plain 以便可以更轻松地在浏览器中查看输出。否则,由于没有 HTML 格式,输出将显示为单行文本。
输出的第一行将是列标题(在这种情况下使用字段名称)。值用制表符 \t 分隔,行用换行符 \n 分隔。输出应如下所示:
firstname lastname age
Mary Johnson 25
Amanda Miller 18
James Brown 31
Patricia Williams 7
Michael Davis 43
Sarah Miller 24
Patrick Miller 27
此代码中已经存在一个可能不会立即明显的弱点。如果要输出的字段之一已经包含一个或多个制表符,或者更糟的是一个换行符怎么办?因为我们依赖这些字符来指示分列和换行,所以这将抛弃整个过程。
解决方案是“转义”制表符。在这种情况下,我们将用文字 \t 替换制表符,用文字 \n 替换换行符,这样它们就不会影响格式:
<?php
function cleanData( &$str ) {
$str = preg_replace( "/\t/", "\\t", $str );
$str = preg_replace("/\r?\n/", "\\n", $str);
}
header("Content-Type: text/plain");
$flag = false;
foreach( $data as $row ) {
if( !$flag ) {
// display field/column names as first row
echo implode( "\t", array_keys( $row ) ) . "\r\n";
$flag = true;
}
array_walk( $row, 'cleanData' );
echo implode( "\t", array_values( $row ) ) . "\r\n";
}
exit;
?>
现在,在回显每一行之前,所有制表符都被替换为“\t”,这样我们的列就不会被打断。此外,数据中的任何换行符都将替换为“\n”。