加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长学院 > PHP教程 > 正文

php – 组合2个CSV文件

发布时间:2020-12-13 13:53:03 所属栏目:PHP教程 来源:网络整理
导读:我正在尝试在 PHP中组合两个CSV文件.我正在寻找完美的方法.到目前为止,这是我的代码: $one = fopen('data5.csv','r');$two = fopen('userdata.csv','r');$final = fopen('final_data.csv','a');$temp1 = fread($one,filesize("data5.csv"));$temp2 = fread(
我正在尝试在 PHP中组合两个CSV文件.我正在寻找完美的方法.到目前为止,这是我的代码:
$one = fopen('data5.csv','r');
$two = fopen('userdata.csv','r');

$final = fopen('final_data.csv','a');

$temp1 = fread($one,filesize("data5.csv"));
$temp2 = fread($two,filesize("userdata.csv"));

fwrite($final,$temp1); 
fwrite($final,$temp2);
如果您有大型CVS并且您不想使用机器的大部分内存(例如,每个CSV为1GB),我会给您一个解决方案.
<?php
function joinFiles(array $files,$result) {
    if(!is_array($files)) {
        throw new Exception('`$files` must be an array');
    }

    $wH = fopen($result,"w+");

    foreach($files as $file) {
        $fh = fopen($file,"r");
        while(!feof($fh)) {
            fwrite($wH,fgets($fh));
        }
        fclose($fh);
        unset($fh);
        fwrite($wH,"n"); //usually last line doesn't have a newline
    }
    fclose($wH);
    unset($wH);
}

用法:

<?php
joinFiles(array('join1.csv','join2.csv'),'join3.csv');

有趣的事实:

我只是用它来连接2个大约500,000行的CSV文件.花了大约5秒钟,使用了512kb的内存.

逻辑:

打开每个文件,读取一行,然后将其写入输出文件.是的,写入每一行可能比编写整个缓冲区要慢,但这样可以在对机器内存温和的同时使用繁重的文件.
在任何时候,您都是安全的,因为脚本一次只能在线读取然后写入.

请享用!

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读