当前位置:网站首页>PHP 读取/导出 CSV文件
PHP 读取/导出 CSV文件
2022-07-29 15:01:00 【lxw1844912514】
工作中经常会有遇到导入/导出的需求,下面是常用的方法。
读取CSV文件,可以分页读取,设置读取行数,起始行数即可。
导出CSV文件,用两种方法进行实现。
/**
* 读取CSV文件
* @param string $csv_file csv文件路径
* @param int $lines 读取行数
* @param int $offset 起始行数
* @return array|bool
*/
public function read_csv_lines($csv_file = '', $lines = 0, $offset = 0)
{
if (!$fp = fopen($csv_file, 'r')) {
return false;
}
$i = $j = 0;
while (false !== ($line = fgets($fp))) {
if ($i++ < $offset) {
continue;
}
break;
}
$data = array();
while (($j++ < $lines) && !feof($fp)) {
$data[] = fgetcsv($fp);
}
fclose($fp);
return $data;
}
/**
* 导出CSV文件
* @param array $data 数据
* @param array $header_data 首行数据
* @param string $file_name 文件名称
* @return string
*/
public function export_csv_1($data = [], $header_data = [], $file_name = '')
{
header('Content-Type: application/octet-stream');
header('Content-Disposition: attachment; filename=' . $file_name);
if (!empty($header_data)) {
echo iconv('utf-8','gbk//TRANSLIT','"'.implode('","',$header_data).'"'."\n");
}
foreach ($data as $key => $value) {
$output = array();
$output[] = $value['id'];
$output[] = $value['name'];
echo iconv('utf-8','gbk//TRANSLIT','"'.implode('","', $output)."\"\n");
}
}
/**
* 导出CSV文件
* @param array $data 数据
* @param array $header_data 首行数据
* @param string $file_name 文件名称
* @return string
*/
public function export_csv_2($data = [], $header_data = [], $file_name = '')
{
header('Content-Type: application/vnd.ms-excel');
header('Content-Disposition: attachment;filename='.$file_name);
header('Cache-Control: max-age=0');
$fp = fopen('php://output', 'a');
if (!empty($header_data)) {
foreach ($header_data as $key => $value) {
$header_data[$key] = iconv('utf-8', 'gbk', $value);
}
fputcsv($fp, $header_data);
}
$num = 0;
//每隔$limit行,刷新一下输出buffer,不要太大,也不要太小
$limit = 100000;
//逐行取出数据,不浪费内存
$count = count($data);
if ($count > 0) {
for ($i = 0; $i < $count; $i++) {
$num++;
//刷新一下输出buffer,防止由于数据过多造成问题
if ($limit == $num) {
ob_flush();
flush();
$num = 0;
}
$row = $data[$i];
foreach ($row as $key => $value) {
$row[$key] = iconv('utf-8', 'gbk', $value);
}
fputcsv($fp, $row);
}
}
fclose($fp);
}边栏推荐
猜你喜欢

NLP自然语言处理-机器学习和自然语言处理介绍(二)

手摸手实现Canal如何接入MySQL实现数据写操作监听

深度学习-神经网络

极市直播丨严彬-Unicorn:走向目标跟踪的大一统(ECCV2022 Oral)

Qt学习第一天

NLP自然语言处理-机器学习和自然语言处理介绍(一)

Generate Class bytecode files with Asm

文件管理:文件的逻辑结构

Why does APP use the JSON protocol to interact with the server: serialization related knowledge

Learning Policies for Adaptive Tracking with Deep Feature Cascades全文翻译
随机推荐
Flink SQL Hudi 实战
LeetCode·739.每日温度·递减栈
什么是异构计算
Numpy
【LeetCode】566. 重塑矩阵
令人难以置信的DeepMind数据库现在包括了科学界已知的几乎所有蛋白质
怎么建立数据分析思维
数据分析(二)
【IIC通信】Chap.1(I2C)IIC通信原理、IIC读写时序详解
字典树笔记(自用)
DevOps的未来趋势
用Asm生成Class字节码文件
ST表(动态规划倍增思路离线维护区间极值问题)
小学生学程序---百变服装
一文详解8086微处理器系统结构
Linux环境 redis完整配置及启动命令
又一位AI大佬辞职进体制内!AI的尽头是编制?
WOLFLAB一方老师为什么要写网络虚拟化《VMware NSX-T卷2》路由架构-2
【微服务】(十六)—— 分布式事务Seata
AOP实现企业级API访问接口监控(通过Google Guava缓存数据)