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);
}