# Csv数据导入导出
Csv数据导入导出
标签(空格分隔): php
代码
public function customerCsvHandler()
{
print("开始处理..." . PHP_EOL);
$time = time();
$map = [];
$descKey = 0;
ini_set('memory_limit', '1024M');
$handle = fopen("./Upload/客源.csv", 'rb');
if ($handle === false) {
exit("文件打开失败" . PHP_EOL);
}
while (feof($handle) === false) {
$value = fgetcsv($handle);
$value = eval('return ' . iconv('gbk', 'utf-8', var_export($value, true)) . ';');
if (trim($value[0]) == "类型") {
$descKey = array_search("备注", $value);
$map[] = $value;
} elseif (trim($value[0]) == "求购" || trim($value[0]) == "求租" ) {
$map[] = $value;
} else {
$end = array_pop($map);
$end[$descKey] .= implode(";", $value);
$map[] = $end;
}
unset($value);
}
fclose($handle);
print("数据处理成功 开始导出..." . PHP_EOL);
$header = $map[0];
unset($map[0]);
$this->writeCsv(array_values($map), $header, "./Upload/客源_new.csv");
print("导出成功: " . "./Upload/客源_new.csv" . PHP_EOL);
print("执行时间/s: ". (time() - $time) . PHP_EOL);
}
/**
* 房源处理
* @command php cli.php Crontab/CsvDataHandler/houseCsvHandler
*/
public function houseCsvHandler()
{
print("开始处理..." . PHP_EOL);
$time = time();
$map = [];
$descKey = 0;
ini_set('memory_limit', '1024M');
$handle = fopen("./Upload/房源.csv", 'rb');
if ($handle === false) {
exit("文件打开失败" . PHP_EOL);
}
while (feof($handle) === false) {
$value = fgetcsv($handle);
$value = eval('return ' . iconv('gbk', 'utf-8', var_export($value, true)) . ';');
if (trim($value[0]) == "类型") {
$descKey = array_search("备注", $value);
$map[] = $value;
} elseif (trim($value[0]) == "出租" || trim($value[0]) == "出售" ) {
$map[] = $value;
} else {
$end = array_pop($map);
$end[$descKey] .= implode(";", $value);
$map[] = $end;
}
unset($value);
}
fclose($handle);
print("数据处理成功:开始导出数据" . PHP_EOL);
$header = $map[0];
unset($map[0]);
$this->writeCsv(array_values($map), $header, "./Upload/房源_new.csv");
print("导出成功: " . "./Upload/房源_new.csv" . PHP_EOL);
print("执行时间/s: ". (time() - $time) . PHP_EOL);
}
public function writeCsv(&$data, $header, $fileName)
{
$fp = fopen($fileName, 'w');
var_dump($fp);
foreach ($header as $key => $value) {
$header[$key] = iconv('utf-8', 'gbk', $value);
}
fputcsv($fp, $header);
$num = 0;
$limit = 100000;
$count = count($data);
for ($i = 0; $i < $count; $i++) {
$num++;
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);
}
}
public function test()
{
$handle = fopen("./Upload/房源.csv", 'rb');
while (feof($handle) === false) {
yield fgetcsv($handle);
}
fclose($handle);
}
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· winform 绘制太阳,地球,月球 运作规律
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· AI与.NET技术实操系列(五):向量存储与相似性搜索在 .NET 中的实现
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理