2013-11-26 4 views
0

도움이 2 파일에서 CSV - 하나를 수집합니다. 비슷한 셀을 병합합니다. 예가 아래에 나와 있으며 내 코드의 일부입니다. 결과 파일 - 나는PHP를 사용하여 CSV 파일을 결합

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

csv2.csv

csv1.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); 
+0

그것은 더 도움이 될 수도, 당신은 스크립트에서 기대하는 출력 :

편집 : 그래서 지금은 당신이 원하는대로 작동합니다. –

+0

답변 해 주셔서 감사합니다. 샘플 출력은 예제 all.csv에 나와 있습니다. 아니면 다른 것이 필요합니까? – Tom910

+0

시험해보십시오. http://stackoverflow.com/questions/17251862/how-to-merge-csv-files-in-php-line-by-line –

답변

0

파일 시스템에서 $ _Files없이 코드를 시도했지만 제대로 작동합니다. 따라서 문제는 파일 uploade에있을 수 있으며 게시 한 코드에는 없습니다. 당신이 당신의 전류 출력을 설명하는 경우

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

'이름;. 가격, 가격 톰 1000 1200 안나; 2000; 2300 하기 Aleks 3000 Maikal, 2000 Piter 5000 앙드레; 2000 Maikal2는, 2400'은 그래서 나온다. 그리고 그것은 내가 필요로하는 것이 아닙니다. – Tom910

+0

정확하게 그것을 필요로합니까 : 이름; 가격; 가격 A 릭; 3000; Andre ;; 2000 Anna; 2000; 2300 Piter; 5000; Maikal; 2000; Maikal2 ;; 2400 Tom; 1000; 1200? – Dinistro

+0

감사합니다. 누가 뛰려고했는데 작동하지 않습니다. IDE 에디터는 오류가 어디에 있는지 알 수 없습니다. 내일 모두가 확인하고 대답 할 것입니다. – Tom910

관련 문제