使用php组合csv文件

时间:2013-11-26 12:21:07

标签: php csv

帮助收集2个文件csv - one。合并类似的单元格。下面显示了一个示例,以及我的部分代码。 我将非常感谢你的帮助和提前感谢

csv1.csv =

name;price
Tom;1000
Anna;2000
Aleks;3000
Maikal;2000
Piter;5000

csv2.csv =

name;price
Tom;1200
Anna;2300
Andre;2000
Maikal2;2400

all.csv - 生成的文件。

name;price;price
Aleks;3000;
Andre;;2000
Anna;2000;2300
Piter;5000;
Maikal;2000;
Maikal2;;2400
Tom;1000;1200

我有一个简单的基于1行粘贴文件的脚本。但它给出了不同的结果。

if(@$_FILES["DATAF_1"]["size"]>0 AND @$_FILES["DATAF_2"]["size"]>0)
 {
    $data=array();
        function read_csv($file)
        {
        $out=array();
        $lines = file($file);

            foreach ($lines as $line_num => $line)
            {
                $out[]=explode(";",$line);
            }
        return $out;
        }

        function action_csv(&$array,$input)
        {
            for ($i=0; $i<count($input); $i++)
            {
                for ($i2=1; $i2<count($input[$i]); $i2++) {
                if(trim($input[$i][0])!=""){$array[trim($input[$i][0])][]=trim($input[$i][$i2]);}
                }
            }
        }

        function form_csv($data)
        {
        $out=array();
            foreach ($data as $line_num => $line)
            {
                $out[]=$line_num.";".implode(";",$line);
            }
        return implode("\r\n",$out);
        }

    $data1=read_csv($_FILES["DATAF_1"]["tmp_name"]);
    $data2=read_csv($_FILES["DATAF_2"]["tmp_name"]);
    action_csv($data,$data1);
    action_csv($data,$data2);


    @unlink("out.csv");
    $fp = fopen ("out.csv", "w+");
    fwrite ($fp, form_csv($data));
    fclose ($fp);

1 个答案:

答案 0 :(得分:0)

我尝试了没有$ _Files的代码(仅来自文件系统)并且它有效。所以问题可能在文件上传而不是你发布的代码中。

编辑: 所以现在它应该按你的意愿工作:

function genAllIndexes(&$array,&$maxIndex){
    foreach($array as &$line){
        for($i = 0; $i < $maxIndex; $i++){
            if(!isset($line[$i])){
                $line[$i] = "";
            }
        }
        ksort($line);
    }
}
function action_csv(&$array,$input, &$counter){
    for ($i=0; $i<count($input); $i++){
        for ($i2=1; $i2<count($input[$i]); $i2++) {
            if(trim($input[$i][0])!=""){
                $array[trim($input[$i][0])][$counter]=trim($input[$i][$i2]);
            }
        }
    }
    $counter++;
}
$data1=read_csv('data1.csv');
$data2=read_csv('data2.csv');

$counter = 0;
action_csv($data,$data1, $counter);
action_csv($data,$data2, $counter);
genAllIndexes($data, $counter);
ksort($data);


@unlink("out.csv");
$fp = fopen ("out.csv", "w+");
fwrite ($fp, form_csv($data));
fclose ($fp);