>백엔드 개발 >PHP 튜토리얼 >PHP 체인 연산 출력 엑셀(csv)

PHP 체인 연산 출력 엑셀(csv)

WBOY
WBOY원래의
2016-08-08 09:32:54999검색

직장에서 우리는 간단하고 비교적 표준화된 데이터를 내보내도록 요청하는 제품 작업을 자주 접하게 됩니다. 이때 간단한 사용 방법이 있다면 훨씬 더 간단할 것입니다. 다음은 체인 작업을 사용하여 간단한 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 튜토리얼에 관심이 있는 친구들에게 도움이 되었으면 좋겠습니다.

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.