使用php组合csv文件


Combining csv file using php

帮助从两个文件中收集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

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

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

我尝试了不带$_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);