百万数据php7取出循环_php百万级大批量数据excel 导出

class xlsTools

{

var $inEncode = 'utf-8';

var $outEncode = 'gb2312';

protected $rowCount; //存储已经存在内存中的记录条数

protected $rowFlushCount;// 一次flush的数据条数

public function __construct($rowFlushCount = 1000)

{

$this->rowFlushCount = $rowFlushCount;

$this->rowCount = 0;

}

public function __destruct()

{

// TODO: Implement __destruct() method.

}

public function start($param)

{

// todo 文件名这里建议允许自定 ddcoder

$filename = $param['type'] . '-' . date('YmdHis') . '(' . $param['name'] . ')';

$this->doStart($param['title'], $filename);

}

public function doStart($keys, $filename)

{

$this->download($filename . '.xls');

// php输出到缓冲区

echo '

';

echo '

// 有时候需要自定义表头 ddcdoer 修改于2017-08-26

if ($keys) {

echo '

' . implode('', $keys) . " \r\n";

}

//刷新缓冲区

flush();

}

//下载文件

//$mimeType = 'application/force-download'

//Content-Type: application/vnd.openxmlformats-officedocument.spreadsheetml.sheet

//$mimeType = 'application/vnd.ms-excel'

public function download($fname = 'data', $data = null, $mimeType = 'application/force-download')

{

if (headers_sent($file, $line)) {

echo 'Header already sent @ ' . $file . ':' . $line;

exit();

}

//header('Cache-Control: no-cache;must-revalidate');

//fix ie download bug header('Pragma: no-cache, no-store');

header("Expires: Wed, 26 Feb 1997 08:21:57 GMT");

if (strpos($_SERVER["HTTP_USER_AGENT"], 'MSIE')) {

$fname = urlencode($fname);

header('Content-type: ' . $mimeType);

} else {

header('Content-type: ' . $mimeType . ';charset=utf-8');

}

header("Content-Disposition: attachment; filename=\"" . $fname . '"');

//header( "Content-Description: File Transfer");

if ($data) {

header('Content-Length: ' . strlen($data));

echo $data;

exit();

}

}

/**

* 生成并下载csv文件

*/

public function csv_export_f($keys, $expData, $fileName)

{

// export file

$csv = '';

foreach ($keys as $key) {

$csv .= '"' . iconv("UTF-8", "gb2312", $key) . '",';

}

$csv .= "\n";

foreach ($expData as $expArr) {

foreach ($expArr as $e_key => $exp) {

$csv .= iconv("UTF-8", "gbk", $this->escapeCSV($expArr[$e_key])) . ',';

}

$csv .= "\n";

}

ob_end_clean();

$fileName .= '.csv';

header("Content-type:text/csv");

header("Content-Disposition:attachment;filename=" . iconv("UTF-8", "gb2312", $fileName));

header('Cache-Control:must-revalidate,post-check=0,pre-check=0');

header('Expires:0');

header('Pragma:public');

ob_end_clean();

echo $csv;

}

public function escapeCSV($str)

{

$str = str_replace(array(',', '"', "\n\r"), array('', '""', ''), $str);

if ($str == "") {

$str = '""';

}

return $str;

}

public function allData($rows)

{

foreach ($rows as $row) {

echo '

' . implode('', $row) . "\r\n";

}

flush();

}

public function oneData($row)

{

echo '

' . implode('', $row) . "\r\n";

flush();

}

public function end()

{

echo '

';

flush();

}

/**

* 多条数据flush一次 默认1000,有初始化对象决定

*/

public function multiData($row)

{

$this->rowCount++;

echo '

' . implode('', $row) . "\r\n";

if ($this->rowCount >= $this->rowFlushCount) {

flush();

}

}

}

function actionHowToExportBigData()

{

$xlsTools = new xlsTools();

$xlsTools->start([

'title' => ['列名1', '列名2'],//列名

'type' => 'xls', //导出的excel的类型

'name' => '测试1000W导出' //导出的excel的文件名

]

);

/* 导出1000万条示例 */

for ($i = 0; $i < 10000000; $i++) {

$row = ['列值1' => 1, '列值2' => 'x'];

$xlsTools->multiData($row);

}

$xlsTools->end();

}

actionHowToExportBigData();

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值