工作中经常会遇到产品运营让导出一些简单的比较规范的数据,这时候要是有一个简单的方法可以用就简单多了。下面是我的一个输出简单的excel(csv)的方法类,用到了链式操作。说到链式操作,在jquery中可能经常用到,是不是也感觉到链式操作用起来很爽,我们也在这个类中实现下链式操作。
其实链式操作很简单的,就是在前一个类方法最后返回一个该类的对象($this),提供给下一个方法调用。
<? php
class Array2csv{
/*
*@var string $ext 扩展名
*/
private $ext = 'csv' ;
/* *
* @desc构造方法
* @param string $filename 要输出的文件名
* @param string $ext 扩展名
*/
public function __construct( $filename , $ext = null ){
ob_start ();
header ("Content-type: text/html;charset=utf-8" );
header ("Content-type: application/x-csv" );
if (PHP_SAPI == 'cli') echo "CLI模式下不能导出csv文件\r" ;
$this ->ext = $ext === null ? $this ->ext : $ext ;
header ("Content-Disposition: attachment;filename=". $filename .".". $this -> ext);
ob_flush ();
return $this ;
}
/* *
* @desc 打印excel标题
* @param array $title 要输出的标题行
* @param object Array2csv 对象本身
*/
public function title( $title ){
$title = implode (",", $title );
echo $title ."\n" ;
return $this ;
}
/* *
* @desc 打印一行excel内容
* @param array $body 要输出的内容
* @param object Array2csv 对象本身
*/
public function body( $body ){
if (! is_array ( $body ) || empty ( $body )) {
return false ;
}
$body = implode (",", $body );
echo $body ."\n" ;
return $this ;
}
/* *
* @desc 打印多行excel内容
* @param array $bodyArr 要输出的多行内容
* @param object Array2csv 对象本身
*/
public function multiBody( $bodyArr ){
if (! is_array ( $bodyArr ) || empty ( $bodyArr )) return false ;
foreach ( $bodyArr as $key => $value ) {
if ( is_array ( $value )){
$value = implode (",", $value );
echo $value ."\n" ;
}
}
return $this ;
}
}
$test = new Array2csv('test' );
$arr = array (
array ('luluyrt@163测试数据','奔跑的Man1','奔跑的userman'),
array ('luluyrt@163测试数据','奔跑的Man2','奔跑的userman'),
array ('luluyrt@163测试数据','奔跑的Man3','奔跑的userman'),
array ('luluyrt@163测试数据','奔跑的Man4','奔跑的userman'),
array ('luluyrt@163测试数据','奔跑的Man5','奔跑的userman'),
array ('luluyrt@163测试数据','奔跑的Man6','奔跑的userman' )
);
$test ->title( array ('测试','呵呵','哈哈'))->body( array ('100,sadkl','sdsas','sdvsvdd分'))->multiBody( $arr );
输出的csv如下图所示:
但是这里面有个问题,从编码是utf-8的数据库中取出来的汉字输出excel(csv)会乱码,这个时候你要注意,要在获取数据之前设置数据库的编码,比如说我的需要的是utf-8进行输出,这个时候就要
$link = mysqli_connect ( $host , $user , $passwd , $db ); mysqli_query ( $link , "set names utf8");
进行编码转换方可正常显示,下面是我的数据库信息和编码前后效果:
数据库信息
设置数据库编码前后的对比
查看更多关于PHP链式操作输出excel(csv)的详细内容...
声明:本文来自网络,不代表【好得很程序员自学网】立场,转载请注明出处:http://www.haodehen.cn/did29816