处理大数据导出csv文件

//处理订单状态

$fileName= "订单列表";

$header= [

    '订单状态',

    '订单类型',

    '结算状态',

    '主订单号',

    '子订单号',

    '供应商ID',

    '供应商',

    '订单采购金额',

    '订单销售金额',

    '售后退款金额',

    '用户id',

    '会员等级',

    '收货人',

    '收货电话',

    '收货地址',

    '商品SKU',

    '商品名称',

    '规格',

    '商品分类',

    '品牌',

    '销售类型',

    '数量',

    '销售单价',

    '销售总价',

    '采购单价',

    '采购总价',

    '下单时间',

    '支付时间',

];  //表头信息

$fields= [

    'orderStatusName',

    'afterSaleStr',

    'billStatus',

    'orderNumber',

    'parcelNumber',

    'goodsSupplierId',

    'supplierName',

    'allGoodsPurchasingPrice',

    'totalAmt',

    'refundAmt',

    'userId',

    'memberLevelStr',

    'consignee',

    'mobile',

    'codeStringInfo',

    'skuId',

    'orderDetailTitle',

    'goodsSpecification',

    'goodsTypeThreeName',

    'brandName',

    'activityName',

    'goodsNum',

    'goodsTotalAmtE2',

    'totalAmtE2',

    'goodsPurchasingPriceE2',

    'goodsPurchasingPriceE2Total',

    'createdAt',

    'payTimeStr',

];

//设置header

$header= array_combine($fields,$header);

BaseFormModel::csvExport($data, $header, [], $fileName, true, 'utf-8');

/**

* 导出csv

* @param array $data 数据

* @param array $headers csv标题+数据

* @param array $specHeaders 需要转成字符串的数组下标

* @param string $fileName 文件名称

* @param bool $isFirst 是否只去第一条

* @param string $fontType 需要导出的字符集 csv默认为utf-8

* @author zhaohao

* @date 2019-12-10 11:38

*/

public static function csvExport(array $data, array $headers, $specHeaders = [], $fileName = '',$isFirst = false, $fontType = 'gbk//IGNORE') {

    //终端导出无需header头

    header('Content-Type: application/vnd.ms-excel');

    header('Content-Disposition: attachment;filename="'.$fileName.'.csv"');

    header('Cache-Control: max-age=0');

    $fp= fopen('php://output','a');

    foreach ($headers as $key=> $value) {

        $headers[$key] = mb_convert_encoding($value, $fontType, 'utf-8');

}

    if($isFirst){

        fputcsv($fp, $headers);

}

    //计数器

    $num= 0;

    $limit= 50000;

    //逐行取出数据,不浪费内存

    $count= count($data);

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

        $num++;

        if ($limit%200 == $num) {

            ob_flush();

            flush();

            $num= 0;

}

        $row= $data[$i];

        $ret= [];

        foreach ($headers as $key=> $value) {

            if(!empty($specHeaders) && in_array($key,$specHeaders)){

                $ret[$key] = mb_convert_encoding($row[$key], $fontType, 'utf-8')."\t";

            }else{

                $ret[$key] = mb_convert_encoding($row[$key], $fontType, 'utf-8');

}

}

        fputcsv($fp, $ret);

}

    unset($data);

    unset($ret);

    fclose($fp);

    exit;

}

你可能感兴趣的:(处理大数据导出csv文件)