PHP 將 陣列 轉換成 CSV 輸出

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'); 轉換.

作者: Tsung

對新奇的事物都很有興趣, 喜歡簡單的東西, 過簡單的生活.

在〈PHP 將 陣列 轉換成 CSV 輸出〉中有 7 則留言

  1. 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;
    }

發表迴響

這個網站採用 Akismet 服務減少垃圾留言。進一步了解 Akismet 如何處理網站訪客的留言資料