직장에서 우리는 간단하고 비교적 표준화된 데이터를 내보내도록 요청하는 제품 작업을 자주 접하게 됩니다. 이때 간단한 사용 방법이 있다면 훨씬 더 간단할 것입니다. 다음은 체인 작업을 사용하여 간단한 Excel(csv)을 출력하는 메서드 클래스입니다. 체인 작업에 대해 말하면 jquery에서 자주 사용될 수 있습니다. 체인 작업이 사용하기 매우 편하다고 생각하시나요? 이 클래스에서는 다운체인 작업도 구현합니다.
실제로 체인 연산은 매우 간단합니다. 이전 클래스 메소드의 끝에서 이 클래스의 객체($this)를 반환하고 이를 다음 메소드 호출에 제공하는 것입니다.
<?<span>php </span><span>class</span><span> Array2csv{ </span><span>/*</span><span> *@var string $ext 扩展名 </span><span>*/</span> <span>private</span> <span>$ext</span> = 'csv'<span>; </span><span>/*</span><span>* * @desc构造方法 * @param string $filename 要输出的文件名 * @param string $ext 扩展名 </span><span>*/</span> <span>public</span> <span>function</span> __construct(<span>$filename</span>,<span>$ext</span>=<span>null</span><span>){ </span><span>ob_start</span><span>(); </span><span>header</span>("Content-type: text/html;charset=utf-8"<span>); </span><span>header</span>("Content-type: application/x-csv"<span>); </span><span>if</span>(PHP_SAPI == 'cli') <span>echo</span> "CLI模式下不能导出csv文件\r"<span>; </span><span>$this</span>->ext = <span>$ext</span> === <span>null</span> ? <span>$this</span>->ext : <span>$ext</span><span>; </span><span>header</span>("Content-Disposition: attachment;filename=".<span>$filename</span>.".".<span>$this</span>-><span>ext); </span><span>ob_flush</span><span>(); </span><span>return</span> <span>$this</span><span>; } </span><span>/*</span><span>* * @desc 打印excel标题 * @param array $title 要输出的标题行 * @param object Array2csv 对象本身 </span><span>*/</span> <span>public</span> <span>function</span> title(<span>$title</span><span>){ </span><span>$title</span> = <span>implode</span>(",", <span>$title</span><span>); </span><span>echo</span> <span>$title</span>."\n"<span>; </span><span>return</span> <span>$this</span><span>; } </span><span>/*</span><span>* * @desc 打印一行excel内容 * @param array $body 要输出的内容 * @param object Array2csv 对象本身 </span><span>*/</span> <span>public</span> <span>function</span> body(<span>$body</span><span>){ </span><span>if</span>(!<span>is_array</span>(<span>$body</span>) || <span>empty</span>(<span>$body</span><span>)) { </span><span>return</span> <span>false</span><span>; } </span><span>$body</span> = <span>implode</span>(",", <span>$body</span><span>); </span><span>echo</span> <span>$body</span>."\n"<span>; </span><span>return</span> <span>$this</span><span>; } </span><span>/*</span><span>* * @desc 打印多行excel内容 * @param array $bodyArr 要输出的多行内容 * @param object Array2csv 对象本身 </span><span>*/</span> <span>public</span> <span>function</span> multiBody(<span>$bodyArr</span><span>){ </span><span>if</span>(!<span>is_array</span>(<span>$bodyArr</span>) || <span>empty</span>(<span>$bodyArr</span>)) <span>return</span> <span>false</span><span>; </span><span>foreach</span> (<span>$bodyArr</span> <span>as</span> <span>$key</span> => <span>$value</span><span>) { </span><span>if</span>(<span>is_array</span>(<span>$value</span><span>)){ </span><span>$value</span> = <span>implode</span>(",", <span>$value</span><span>); </span><span>echo</span> <span>$value</span>."\n"<span>; } } </span><span>return</span> <span>$this</span><span>; } } </span><span>$test</span> = <span>new</span> Array2csv('test'<span>); </span><span>$arr</span> = <span>array</span><span>( </span><span>array</span>('luluyrt@163.com','奔跑的Man1','奔跑的userman'), <span>array</span>('luluyrt@163.com','奔跑的Man2','奔跑的userman'), <span>array</span>('luluyrt@163.com','奔跑的Man3','奔跑的userman'), <span>array</span>('luluyrt@163.com','奔跑的Man4','奔跑的userman'), <span>array</span>('luluyrt@163.com','奔跑的Man5','奔跑的userman'), <span>array</span>('luluyrt@163.com','奔跑的Man6','奔跑的userman'<span>) ); </span><span>$test</span>->title(<span>array</span>('测试','呵呵','哈哈'))->body(<span>array</span>('100,sadkl','sdsas','sdvsvdd分'))->multiBody(<span>$arr</span>);
출력 csv는 아래와 같습니다.
하지만 여기에는 문제가 있습니다. UTF-8 인코딩을 사용하여 데이터베이스에서 가져온 Excel(csv)의 한자 출력은 데이터를 가져오기 전에 데이터베이스의 인코딩 설정에 주의해야 합니다. 예를 들어 필요한 것은 출력용으로 utf-8이 필요합니다.
<span>$link</span> = <span>mysqli_connect</span>(<span>$host</span>, <span>$user</span>, <span>$passwd</span>, <span>$db</span><span>); </span><span>mysqli_query</span>(<span>$link</span>, "set names utf8");
인코딩 변환 후에만 정상적으로 표시될 수 있습니다. 다음은 내 데이터베이스 정보와 인코딩 전후의 효과입니다.
데이터베이스 정보
데이터베이스 인코딩 설정 전과 후 비교
보내주세요~
위 내용은 PHP 체인 연산 출력을 엑셀(csv)로 소개한 내용으로, PHP 튜토리얼에 관심이 있는 친구들에게 도움이 되었으면 좋겠습니다.