工作中經常會遇到產品運營讓導出一些簡單的比較規范的數據,這時候要是有一個簡單的方法可以用就簡單多了。下面是我的一個輸出簡單的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('[email protected]','奔跑的Man1','奔跑的userman'), array('[email protected]','奔跑的Man2','奔跑的userman'), array('[email protected]','奔跑的Man3','奔跑的userman'), array('[email protected]','奔跑的Man4','奔跑的userman'), array('[email protected]','奔跑的Man5','奔跑的userman'), array('[email protected]','奔跑的Man6','奔跑的userman') ); $test->title(array('測試','呵呵','哈哈'))->body(array('100,sadkl','sdsas','sdvsvdd分'))->multiBody($arr);
輸出的csv如下圖所示:
$link = mysqli_connect($host, $user, $passwd, $db); mysqli_query($link, "set names utf8");
進行編碼轉換方可正常顯示,下面是我的數據庫信息和編碼前後效果:
數據庫信息
設置數據庫編碼前後的對比
send Me~