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

對新奇的事物都很有興趣, 喜歡簡單的東西, 過簡單的生活.
本篇發表於 Programming 並標籤為 , , , 。將永久鏈結加入書籤。

PHP 將 陣列 轉換成 CSV 輸出 有 7 則回應

  1. 羽山 說道:

    謝謝宗大的函式,小的收下了(淚~)

  2. 白目捷 說道:

    CSV轉回陣列,是不是只要注意頭尾的"和""就可以了。
    注意頭尾的",這個除了用正規化之外還有沒有更好的辦法。

  3. kui 說道:

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

  4. Andy 說道:

    你好,請問目前CSV的分割符號只能使用逗號嗎?

  5. Andy 說道:

    在試試看,謝謝你

發表迴響