2016-09-13 10 views
0

私はカラムに1500以上のエントリを持つcsvファイルを持っています。これでcsvファイルのすべての値を読み取ることができます。PHPを使用してCSVファイルから複数の配列を作成する

 $rowcount = 1; 
     $srcFileName = "input/test.csv"; 
     $file = fopen($srcFileName,"r"); 
     $inputfielscount = count(file($srcFileName, FILE_SKIP_EMPTY_LINES)); 
     while($rowcount < $inputfielscount) 
     { 
      $row = fgetcsv($file); 
      $result=array("id" =>$row[0],"des"=>"I am jhon",salery="10000"); 
      $Final=array("listingsEmp"=>$result); 
     } 

最初読んだ後(1-10)値iが様((配列[0] => $結果等)アレイを作成し、次に、(11-20)から同じタスクを繰り返しwanttoと別のアレイを作成しますarray [1] => $最後の$配列は、csvファイル(11-10)から読み込んだ次のidsに関する情報を含んでいます)。上記のrequirmentについて

私はこれにコードを変更:

 $rowcount = 1; 
     $srcFileName = "input/test.csv"; 
     $file = fopen($srcFileName,"r"); 
     while($rowcount < 20) 
     { 

      if(($rowcount % 10 == 0) && ($rowcount != 0)) { 
       $rowcount++; 
       break; 
      }else{ 

        $row = fgetcsv($file); 
       // some curl code for fetching data according to csv file field(Id) 
        $result=array("id" =>$row[0],"des"=>"I am jhon",salery="10000"); //contain 10 array 

      } 
     } 

    $Final=array("listingsEmp"=>$result); 

今はカール使用して(0-10インデックス配列、それぞれが固有のIDと対応する値を有する)を有し、この$最終的な配列を掲示し、取得します私はcsvファイルに保存しています。

 $currenttime=date("Y-m-d-H_i_s"); 
     $opfile='output'.$currenttime.'.csv'; //path wher op csv file exist 
     if([email protected]($srcFileName,'/output/'.$opfile)) 
     { 
      $errors= error_get_last(); 
      echo "COPY ERROR: ".$errors['type']; 
      echo "<br />\n".$errors['message']; 
     }else { // echo "File copied from remote!"; 
      $fp = fopen('output/output'.$currenttime.'.csv',"a"); 
      $fr = fopen($srcFileName,"r"); 
      $rowcounts=0; 
      $FinalRES=$Final->response; 

      while($rowcounts< $inputfielscount) { 
        $resultBulk=$FinalRES[$rowcounts]; 
        $resultBulkStatus=$FinalRES->status; 
        $resultBulkErrors=$FinalRES->errors; 
        $errorMsgArray=$resultBulkErrors[0]; 
        $BulkErrorsMessage=$errorMsgArray->message; 
        $rows = fgetcsv($fr); 
         if($resultBulkStatus=='failure'){ 
            $list = array ($rows[0],$rows[1],$resultBulkStatus,$BulkErrorsMessage); 
         }else { 
            $list = array ($rows[0],$rows[1],$resultBulkStatus,"successfully"); 
         } 
        fputcsv($fp,$list); 
         //$p++; 
         $rowcounts++; 
      } 
     } 

この完全なコードは、一度実行され、10のIDの応答を与えるが、私はそうで(21-30)のために、次の10のid(11-20)と、再度このコードを繰り返したいです。そのことの表示、ダウンロード、出力ファイルのリンク、出力ファイルの後 出力csvファイルに一度すべての応答の書き込みcsvファイル(1500 +)にあるすべてのIDの完全な応答を含んでい

<?php $dnldfilw='output'.$currenttime.'.csv';?> 
      <a href='download.php?filename=<?php echo $dnldfilw; ?>'>Download Output file</a> 

     ?> 
+0

同じcsvを同時に読み取るのに2つまたは3つの方法を使用しているのはなぜですか? – RichardBernards

答えて

0

最も簡単な方法は、単に使用することです

<?php 

    $indexedArray = array(); 
    $indexedSplit = 10; 

    $lines = file($srcFileName); 
    $tempArray = array(); 
    foreach($lines as $line) { 
     if(count($tempArray) % $indexedSplit === 0) { 
      $indexedArray[] = $tempArray; 
      $tempArray = array(); 
     } 
     $tempArray[] = $line; 
    } 

    foreach($indexedArray as $index => $valueArray) { 
     // do the curl magic 
     // write results of curl into csv 
    } 

ご質問は悪い言葉で表現されますが、私はこれは正しい、あなたの目的だろうと思う:?あなたはまだいくつかの擬似コードにコードを短くする... を使用しているfile()機能

+0

こんにちは@RichardBernarde、私のrequirmentは、私のCSVファイルのtherは40行ですと仮定します..私はそれぞれのための配列をクレートしたいのですが、私は 'file()'、 'fopen()'と 'fgetcsv() 10行.Like 1〜10行はarray1,11〜20の行にあり、array2,21〜30の行はarray3になります。最初のarray1をサーバーに送信し、csvファイルに保存します。次に、サーバーにaaray2を送信し、array1の応答の直後に同じcsvファイルに保存して、今あなたが理解することを願っています。 – Urvashi

+0

問題解決済み.. – Urvashi

関連する問題