PHP 可以將陣列直接轉成檔案 - fputcsv(), 但是卻無法直接轉出 CSV 的字串, 所以寫了 Array to CSV 的 Function 來用.
PHP 將 Array 轉換成 CSV 輸出
程式可見下述: function array_to_csv()
此程式的參數, 除了第一個參數(file handler) 拿掉外, 剩下的都跟 fputcsv() 一樣, 詳細可以參考此程式最下方的測試區域.
注意事項
- 若是要輸出給 Windows 的 Excel 讀取, 記得輸出的文字要是 Big5.
- 註: 若輸出的文字編碼是 UTF-8, 需要經過 mb_convert_encoding($csv, 'big5', 'UTF-8'); 轉換.
謝謝宗大的函式,小的收下了(淚~)
CSV轉回陣列,是不是只要注意頭尾的"和""就可以了。
注意頭尾的",這個除了用正規化之外還有沒有更好的辦法。
請愛用 fgetcsv(), 就可以解決你的所有困擾. 😀
fgetcsv始終對Excel 弄的csv 出問題
我寫了個轉換應該大部份都能支持:
function csvtoarr($con,$s=',',$isFirstRowfield = 0)
{
preg_match_all( "/\"(.+?)\"/is", $con, $tpl );
foreach($tpl[0] as $k => $v)
{
$pattern[$k] = $v;
$replacement[$k] = str_replace(array(',',"\n"),array('[~]',''),$tpl[1][$k]);
}
$con = str_replace($pattern,$replacement,$con);
unset($pattern,$replacement);
$con = str_replace(array("\r"),"",$con);
$carr = split("\n",$con);
if(is_array($carr))
{
foreach($carr as $fk=> $row)
{
$row = str_replace(array("\r\n","\r"),"",$row);
if($isFirstRowfield && $fk === 0)
{
$field = split($s,$row);
foreach($field as $f)
{
$ff[] = str_replace('~','',$f);
}
$field = $ff;
continue;
}
$rt[]= split($s,$row);
if($isFirstRowfield && $fk > 0 )
{
foreach($rt[count($rt)-1] as $k => $v)
{
$rt[count($rt)-1][$field[$k]] = str_replace('[~]',',',$v);
unset($rt[count($rt)-1][$k]);
}
}
else
{
foreach($rt[count($rt)-1] as $k => $v)
$rt[count($rt)-1][$k] = str_replace('[~]',',',$v);
}
}
}
return $rt;
}
你好,請問目前CSV的分割符號只能使用逗號嗎?
不會阿, 用 \t 也可以.
在試試看,謝謝你