帮助收集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);
答案 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);