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

猜你喜欢

转载自www.cnblogs.com/yanweifeng/p/12745587.html
今日推荐