php导出csv数据在浏览器中输出提供下载或保存到文件的示例


Posted in PHP onApril 24, 2014

1.在浏览器输出提供下载

/**
 * 导出数据到CSV文件
 * @param array $data  数据
 * @param array $title_arr 标题
 * @param string $file_name CSV文件名
 */
function export_csv(&$data, $title_arr, $file_name = '') {
    ini_set("max_execution_time", "3600");
    $csv_data = '';
    /** 标题 */
    $nums = count($title_arr);
    for ($i = 0; $i < $nums - 1; ++$i) {
        $csv_data .= '"' . $title_arr[$i] . '",';
    }
    if ($nums > 0) {
     $csv_data .= '"' . $title_arr[$nums - 1] . "\"\r\n";
    }
    foreach ($data as $k => $row) {
        for ($i = 0; $i < $nums - 1; ++$i) {
            $row[$i] = str_replace("\"", "\"\"", $row[$i]);
            $csv_data .= '"' . $row[$i] . '",';
        }
        $csv_data .= '"' . $row[$nums - 1] . "\"\r\n";
        unset($data[$k]);
    }
    $csv_data = mb_convert_encoding($csv_data, "cp936", "UTF-8");
    $file_name = empty($file_name) ? date('Y-m-d-H-i-s', time()) : $file_name;
    if (strpos($_SERVER['HTTP_USER_AGENT'], "MSIE")) { // 解决IE浏览器输出中文名乱码的bug
     $file_name = urlencode($file_name);
     $file_name = str_replace('+', '%20', $file_name);
    }
    $file_name = $file_name . '.csv';
    header("Content-type:text/csv;");
    header("Content-Disposition:attachment;filename=" . $file_name);
    header('Cache-Control:must-revalidate,post-check=0,pre-check=0');
    header('Expires:0');
    header('Pragma:public');
    echo $csv_data;
}

2.保存到文件

function export_csv($data, $title_arr, $file_name = '') {

    $csv_data = '';

    /** 标题 */
    $nums = count($title_arr);
    for ($i = 0; $i < $nums - 1; ++$i) {
        $csv_data .= '"' . $title_arr[$i] . '",';
    }

    if ($nums > 0) {
    $csv_data .= '"' . $title_arr[$nums - 1] . "\"\r\n";
    }

    foreach ($data as $k => $row) {
        for ($i = 0; $i < $nums - 1; ++$i) {
            $row[$i] = str_replace("\"", "\"\"", $row[$i]);
            $csv_data .= '"' . $row[$i] . '",';
        }
        $csv_data .= '"' . $row[$nums - 1] . "\"\r\n";
        unset($data[$k]);
    }

    $file_name = empty($file_name) ? date('Y-m-d-H-i-s', time()) : $file_name;
    file_put_contents($file_name, $csv_data) ;
}

调用示例(保存到文件):

$file_name="/var/www/tmp/test.csv" ;
$header = array(
                    '0' => '参数ID',
                    '1' => '参数名称',
                    '2' => '统计次数',
                    '3' => '统计次数百分比',
                    '4' => '唯一用户数',
                    '5' => '唯一用户数百分比',
                    '6' => '人均次数'
            );
            $csvList = array(array("111", "title", "12", "100%", "23", "50%", "4")) ;
            export_csv($csvList, $header, $file_name) ;
PHP 相关文章推荐
数据库的日期格式转换
Oct 09 PHP
用Zend Studio+PHPnow+Zend Debugger搭建PHP服务器调试环境步骤
Jan 19 PHP
PHP实现下载断点续传的方法
Nov 12 PHP
thinkPHP简单实现多个子查询语句的方法
Dec 05 PHP
ThinkPHP 整合Bootstrap Ajax分页样式
Dec 23 PHP
php cookie用户登录的详解及实例代码
Jan 03 PHP
php安全配置记录和常见错误梳理(总结)
Mar 28 PHP
PHP创建单例后台进程的方法示例
May 23 PHP
PHP学习记录之数组函数
Jun 01 PHP
thinkphp5.1 文件引入路径问题及注意事项
Jun 13 PHP
PHP中的自动加载操作实现方法详解
Aug 06 PHP
PHP Beanstalkd消息队列的安装与使用方法实例详解
Feb 21 PHP
smarty模板中使用get、post、request、cookies、session变量的方法
Apr 24 #PHP
php冒泡排序、快速排序、快速查找、二维数组去重实例分享
Apr 24 #PHP
php获取中文拼音首字母类和函数分享
Apr 24 #PHP
PHP获取浏览器信息类和客户端地理位置的2个方法
Apr 24 #PHP
php中有关字符串的4个函数substr、strrchr、strstr、ereg介绍和使用例子
Apr 24 #PHP
php计算当前程序执行时间示例
Apr 24 #PHP
php实现的百度搜索某地天气的小偷代码
Apr 23 #PHP
You might like
德生PL660的电路分析和打磨
2021/03/02 无线电
让你的PHP同时支持GIF、png、JPEG
2006/10/09 PHP
PHP中round()函数对浮点数进行四舍五入的方法
2014/11/19 PHP
Aster vs KG BO3 第一场2.18
2021/03/10 DOTA
无语,javascript居然支持中文(unicode)编程!
2007/04/12 Javascript
JS 控制CSS样式表
2009/08/20 Javascript
ajax的hide隐藏问题解决方法
2012/12/11 Javascript
javascript学习笔记(三)BOM和DOM详解
2014/09/30 Javascript
PHP+jQuery+Ajax实现多图片上传效果
2015/03/14 Javascript
JSONP之我见
2015/03/24 Javascript
js实现滑动触屏事件监听的方法
2015/05/05 Javascript
浅谈关于JavaScript API设计的一些建议和准则
2015/06/24 Javascript
jQuery左侧大图右侧小图焦点图幻灯切换代码分享
2015/08/19 Javascript
javascript实现的网站访问量统计代码
2015/12/20 Javascript
浅谈JavaScript中的this指针和引用知识
2016/08/05 Javascript
JavaScript 实现的checkbox经典实例分享
2016/10/16 Javascript
浅谈在vue中用webpack打包之后运行文件的问题以及相关配置方法
2018/02/21 Javascript
Node.js进阶之核心模块https入门
2018/05/23 Javascript
vue中通过使用$attrs实现组件之间的数据传递功能
2019/09/01 Javascript
在layui中使用form表单监听ajax异步验证注册的实例
2019/09/03 Javascript
[42:34]VP vs VG 2018国际邀请赛小组赛BO2 第一场 8.19
2018/08/21 DOTA
详解python3中zipfile模块用法
2018/06/18 Python
我用Python抓取了7000 多本电子书案例详解
2019/03/25 Python
使用GitHub和Python实现持续部署的方法
2019/05/09 Python
selenium获取当前页面的url、源码、title的方法
2019/06/12 Python
基于keras输出中间层结果的2种实现方式
2020/01/24 Python
用python批量下载apk
2020/12/29 Python
纯CSS3实现手风琴风格菜单具体步骤
2013/05/06 HTML / CSS
详解CSS3弹性伸缩盒
2020/09/21 HTML / CSS
Does C# support multiple inheritance? (C#支持多重继承吗)
2012/01/04 面试题
会计电算化个人求职信范文
2014/01/24 职场文书
大型晚会策划方案
2014/02/06 职场文书
院领导写的就业推荐信
2014/03/09 职场文书
联片教研活动总结
2014/07/01 职场文书
入党宣誓仪式主持词
2015/06/29 职场文书
PHP使用非对称加密算法RSA
2021/04/21 PHP