使用PHP內置函數
fputcsv
、fgetcsv
兩個函數輕鬆實現
fputcsv
(PHP 5 >= 5.1.0, PHP 7)
fputcsv
— 將行格式化爲 CSV 並寫入文件指針
int fputcsv ( resource $handle , array $fields [, string $delimiter = ',' [, string $enclosure = '"' ]] )
fputcsv()
將一行(用 fields 數組傳遞)格式化爲 CSV 格式並寫入由 handle 指定的文件。
參數 | 說明 |
---|---|
handle | 文件指針必須是有效的,必須指向由 fopen() 或 fsockopen() 成功打開的文件(並還未由 fclose() 關閉)。 |
fields | 值的一個數組。 |
delimiter | 可選的 delimiter 參數設定字段分界符(只允許一個字符)。 |
enclosure | 可選的 enclosure 參數設定字段字段環繞符(只允許一個字符)。 |
返回值
返回寫入字符串的長度, 或者在失敗時返回 FALSE。
導出
$list = array (
array('ID', '姓名','年齡','班級'),
array('101', '張三', '13',"一班"),
array('102', '李四', '14',"二班"),
array('103', '王五', '12',"三班"),
array('104', '趙六', '15',"三班"),
array('105', '錢七', '14',"二班"),
array('106', '王八', '13',"一班"),
);
$fp = fopen('file.csv', 'w');
foreach ($list as $fields) {
fputcsv($fp, $fields);
}
fclose($fp);
fgetcsv
(PHP 4, PHP 5, PHP 7)
fgetcsv
— 從文件指針中讀入一行並解析 CSV 字段
array fgetcsv ( resource $handle [, int $length = 0 [, string $delimiter = ',' [, string $enclosure = '"' [, string $escape = '\\' ]]]] )
和 fgets()
類似,只除了 fgetcsv()
解析讀入的行並找出 CSV 格式的字段然後返回一個包含這些字段的數組。
參數 | 說明 |
---|---|
handle | 一個由 fopen() 、popen() 或 fsockopen() 產生的有效文件指針。 |
length | 必須大於 CVS 文件內最長的一行。在 PHP 5 中該參數是可選的。如果忽略(在 PHP 5.0.4 以後的版本中設爲 0)該參數的話,那麼長度就沒有限制,不過可能會影響執行效率。 |
delimiter | 設置字段分界符(只允許一個字符)。 |
enclosure | 設置字段環繞符(只允許一個字符)。 |
escape | 設置轉義字符(只允許一個字符),默認是一個反斜槓。 |
返回值
返回包含讀取字段的索引數組。
Note:
CSV 文件中的空行將被返回爲一個包含有單個 null 字段的數組,不會被當成錯誤。
Note:
在讀取在 Macintosh 電腦中或由其創建的文件時, 如果 PHP 不能正確的識別行結束符,啓用運行時配置可選項 auto_detect_line_endings 也許可以解決此問題。
導入
$list=[];
if (($handle = fopen("file.csv", "r")) !== FALSE) {
while (($data = fgetcsv($handle, 1000, ",")) !== FALSE) {
$num = count($data);
for ($c=0; $c < $num; $c++) {
$arr[]=$data[$c];
}
$list[]=$arr;
unset($arr);
}
fclose($handle);
}
echo "<pre >";
print_r($list);