PHP處理CSV表格,用fgetcsv和fputcsv在數組和CSV間互轉

array <=fgetcsv|fputcsv=> csv
array <=unserialize|serialize=> string
array <=json_decode|json_encode=> string
array <=include|var_export=> string
array <=explode|implode(又名join)=> string

要作在線Excel表格編輯功能,Excel的xls文件格式的解析就是個問題,畢竟這是微軟Office的私有專利格式.
因此要作的話仍是用通用的csv(Comma Separated Value,逗號分隔值)格式吧.
各類辦公軟件都能識別csv表格,其實就是以特定分隔符(好比逗號)分隔單元格的表格.
拿PHP來講,fgetcsv讀入csv表格,返回一個數組,
而後foreach輸出成HTML的<table>,這步操做幾行代碼就能實現,很是簡單.
工做量主要還在於瀏覽器前端,建議你用jQuery進行DOM和AJAX操做,
要實現phpMyAdmin那樣細粒度雙擊單元格編輯,而後AJAX提交也不難,
或者整個表格寫好後一次性$("form").serialize();而後AJAX提交也能夠.

CSV表格的幾條規則:
1.每一行的單元格內容之間用逗號分隔.
2.若是單元格的內容自己有逗號,這個單元格的內容將會用引號包含.
3.若是單元格的內容自己有引號:
引號不在首或尾,這個單元格內容不會被引號包含.
引號在首或尾,這個單元格內容會被引號包含,而且原來首尾的引號會被轉義.php

<?php
header('Content-Type: text/plain; charset=utf-8');

//導出CSV表格:數組轉CSV
$arr = array (
    array('ab', 'cd'),
    array('"a,b"', '"c,d"'),
);
$fp = fopen('file.csv', 'w');
foreach ($arr as $row) {
    //將一行格式化爲CSV並寫入文件指針
    fputcsv($fp, $row);
}
fclose($fp);
unset($arr);

//導入CSV表格:CSV轉數組
$fp = fopen('file.csv', 'r');
while ( ($row = fgetcsv($fp)) !== FALSE ) {
    //從文件指針中讀入一行並解析CSV
    $arr[] = $row;
}
fclose($fp);
var_export($arr);
相關文章
相關標籤/搜索