仕事ではインポート/エクスポートの要件が頻繁に発生します。一般的に使用される方法は次のとおりです。
CSV ファイルを読み取るには、読み取る行数と開始行数を設定するだけで、ページ単位で読み取ることができます。
CSV ファイルのエクスポートは 2 つの方法で実装されます。
/**<br>
* CSVファイルを読み込みます<br>
* @param string $csv_file csv ファイルのパス<br>
* @param int $lines 行数を読み取ります<br>
* @param int $offset 開始行番号<br>
* @return array|bool<br>
*/<br>
public function read_csv_lines($csv_file = '', $lines = 0, $offset = 0)<br>
{<br>
if (!$fp = fopen($csv_file, 'r')) {<br>
false を返します;<br>
}<br>
$i = $j = 0;<br>
while (false !== ($line = fgets($fp))) {<br>
if ($i++ < $offset) {<br />
続けます;<br />
}<br />
休憩;<br />
}<br />
$data = array();<br />
while (($j++ < $lines) && !feof($fp)) {<br />
$data[] = fgetcsv($fp);<br />
}<br />
fclose($fp);<br />
$data を返します;<br />
}<br />
<br />
<br />
/**<br />
* CSVファイルをエクスポート<br />
* @param array $data データ<br />
* @param array $header_data データの最初の行<br />
* @param string $file_name ファイル名<br />
* @戻り文字列<br />
*/<br />
public function export_csv_1($data = [], $header_data = [], $file_name = '')<br />
{<br />
header('Content-Type: application/octet-stream');<br />
header('Content-Disposition: attachment; filename=' . $file_name);<br />
if (!empty($header_data)) {<br />
echo iconv('utf-8','gbk//TRANSLIT','"'.implode('","',$header_data).'"'."n");<br />
}<br />
foreach ($data as $key => $value) {<br>
$output = array();<br>
$output[] = $value['id'];<br>
$output[] = $value['名前'];<br>
echo iconv('utf-8','gbk//TRANSLIT','"'.implode('","', $output).""n");<br>
}<br>
}<br>
<br>
/**<br>
* CSVファイルをエクスポート<br>
* @param array $data データ<br>
* @param array $header_data データの最初の行<br>
* @param string $file_name ファイル名<br>
* @戻り文字列<br>
*/<br>
public function export_csv_2($data = [], $header_data = [], $file_name = '')<br>
{<br>
header('Content-Type: application/vnd.ms-excel');<br>
header('Content-Disposition: attachment;filename='.$file_name);<br>
header('Cache-Control: max-age=0');<br>
$fp = fopen('php://output', 'a');<br>
if (!empty($header_data)) {<br>
foreach ($header_data as $key => $value) {<br>
$header_data[$key] = iconv('utf-8', 'gbk', $value);<br>
}<br>
fputcsv($fp, $header_data);<br>
}<br>
$num = 0;<br>
//每隔$limit行,刷新一下出バッファ,不要太大,不要太小<br>$limit = 100000;<br>
//メモリを無駄にせずにデータを一行ずつ取得します<br>
$count = count($data);<br>
If ($count > 0) {<br>
for ($i = 0; $i
$num++;<br>
// 多すぎるデータによって引き起こされる問題を防ぐために出力バッファをリフレッシュします<br>
if ($limit == $num) {<br>
ob_flush();<br>
フラッシュ();<br>
$num = 0;<br>
}<br>
$row = $data[$i];<br>
foreach ($row as $key => $value) {<br>
$row[$key] = iconv('utf-8', 'gbk', $value);<br>
}<br>
fputcsv($fp, $row);<br>
}<br>
}<br>
fclose($fp);<br>
}
さらに【辛口情報共有】を知りたい方は、PHPエンジニアサブスクリプションアカウントをフォローしてください。