2017-05-21 3 views
0

私のプロジェクト用の試験レポートcsvファイルを生成していますが、エクスポートされたcsvファイルに挿入されるデータをカスタマイズしたいとします。それ、どうやったら出来るの?私はこのためにCodeigniterを使用しています。php codeigniterを使用して生成されたcsvファイルのデータをフォーマットします

現在のところ、私のコードは、質問と、その質問に対する正解と間違った回答の数を含むcsvファイルを生成することができます。

ここにダウンロードしたファイルの画像があります。 Generated CSV File

は、しかし、私は、それは次のようになりたいと思った: コントローラー:

public function csv_report($exam_no){ 
    $this->load->model('instant_model'); 
    $median = $this->median($exam_no); 

    $this->instant_model->exportToCSV($exam_no); 
} 

モデル:だから

public function exportToCSV($exam_no){ 

     $this->load->dbutil(); 
     $this->load->helper('file'); 
     $this->load->helper('download'); 

     $delimiter = ",";  
     $newline = "\r\n"; 
     $filename = "exam_report.csv"; 
     $query = " SELECT DISTINCT(questions.question_id), questions.question, 
      (SELECT count(score) FROM exam_set WHERE exam_no = '$exam_no' AND score > 0 AND questions.question_id = exam_set.question_id) AS correct , 
      (SELECT count(score) FROM exam_set WHERE exam_no = '$exam_no' AND score = 0 AND questions.question_id = exam_set.question_id) AS wrong 
      FROM questions INNER JOIN exam_set ON (questions.question_id = exam_set.question_id) WHERE exam_no = '$exam_no';"; 

     $result = $this->db->query($query); 
     $data = $this->dbutil->csv_from_result($result, $delimiter, $newline); 

     force_download($filename, $data); 

    } 

答えて

0

ここ

Wanted Result

は私のコントローラとモデルでありますあなたはすでにcsv出力を持っていますあなたの結果には、データを追加するだけです。ですから、私たちにCSVラインを与える関数を作ってみましょう。

function get_csv_line(array $row, $delim = ',', $newline = "\n", $enclosure = '"') 
{ 
$line = array(); 
foreach ($row as $item) 
{ 
    $line[] = $enclosure.str_replace($enclosure, $enclosure.$enclosure, $item).$enclosure; 
} 
$out .= implode($delim, $line).$newline; 
return $out; 
} 

編集したコードブロック

$data = $this->dbutil->csv_from_result($result, $delimiter, $newline); 
$row1 = array('mean','maximum','minimum','variance','median'); 
// replace your values. 
$row2 = array(4.66,5,3,7,8); 
$out1 = get_csv_line($row1, $delimiter, $newline); 
$out2 = get_csv_line($row2, $delimiter, $newline); 
$data .= $out1.$out2; 

force_download($filename, $data); 
+0

以下のようにそれは動作しますが、その後追加されたデータがデータベースから来る場合は何?私は$ row2値をクエリとして置き換えようとしました。しかし、csvセルに 'Array'と 'Resource id#36'と表示されるデータは表示されません。 – dubiousconquest

+0

クエリで置き換えません。 '$ row2 = $ result-> row_array()'に置き換えてください。 – jagad89

+0

これは動作します!どうもありがとうございます。 – dubiousconquest

関連する問題