직장에서는 종종 가져오기/내보내기 요구 사항이 있습니다. 다음은 일반적으로 사용되는 방법입니다.
CSV 파일을 읽으려면 페이지 단위로 읽을 수 있습니다. 읽을 줄 수와 시작 줄 수만 설정하면 됩니다.
두 가지 방법으로 구현된 CSV 파일을 내보냅니다.
/**<br>
* CSV 파일 읽기<br>
* @param string $csv_file csv 파일 경로<br>
* @param int $lines 읽을 줄 수<br>
* @param int $offset 시작줄 번호<br>
* @return 배열|bool<br>
*/<br>
공개 함수 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 = 배열();<br />
동안(($j <$lines) && !feof($fp)) {<br />
$data[] = fgetcsv($fp);<br />
}<br />
fclose($fp);<br />
$data 반환;<br />
}<br />
<br />
<br />
/**<br />
* CSV 파일 내보내기<br />
* @param 배열 $data 데이터<br />
* @param array $header_data 데이터의 첫 번째 행<br />
* @param string $file_name 파일명<br />
* @return 문자열<br />
*/<br />
공개 함수 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를 $key로 =>$value) {<br>
$output = 배열();<br>
$output[] = $value['id'];<br>
$output[] = $value['name'];<br>
echo iconv('utf-8','gbk//TRANSLIT','"'.implode('","', $output).""n");<br>
}<br>
}<br>
<br>
/**<br>
* CSV 파일 내보내기<br>
* @param 배열 $data 데이터<br>
* @param array $header_data 데이터의 첫 번째 행<br>
* @param string $file_name 파일명<br>
* @return 문자열<br>
*/<br>
공개 함수 export_csv_2($data = [], $header_data = [], $file_name = '')<br>
{<br>
header('Content-Type: application/vnd.ms-excel');<br>
header('콘텐츠 처리: 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($key)=>$value) {<br>
$header_data[$key] = iconv('utf-8', 'gbk', $value);<br>
}<br>
fputcsv($fp, $header_data);<br>
}<br>
$num = 0;<br>
//每隔$limit行,刷new一下输流buffer,不要大大,也不要大小<br>$한도 = 100000;<br>
//메모리 낭비 없이 한 줄씩 데이터 가져오기 <br>
$count = 개수($data);<br>
If ($count > 0) {<br>
for ($i = 0; $i < $count; $i ) {<br />
$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 엔지니어 구독 계정을 팔로우하세요.