CSV文件处理

 
      生成.csv文件                                
function createCsvFile(){
    $list = array ('姓名,性别,年龄,工作','张三,男,33,php','李三,男,33,Java');
    $fp = fopen('file.csv', 'w');
    foreach ($list as $line) {
        $line=iconv("UTF-8","GB2312//IGNORE",$line); 
        fputcsv($fp, explode(',', $line));
    }
    fclose($fp);
}
      读取.csv文件                                
  function getCsvFileArr(){
        $source = fopen('file.csv', 'r');
        while (!feof($source)){ 
            $data = fgetcsv($source);
            if(is_array($data)){
              foreach($data as $k=>&$v){
                $v=iconv("GB2312","utf-8",$v);
              }
              $csvArr[]=$data;
            }
        }
        fclose($source); 
       return $csvArr
       //echo '<pre>'; print_r($csvArr);
  }
      下载已有的.csv文件                                
$fileName = "file.csv";
header('Content-Type: application/octet-stream');
header('Content-Disposition: attachment; filename=' . $fileName);
header('Content-Transfer-Encoding: binary');
header('Content-Length: ' . filesize($fileName));
readfile($fileName);
      下载数据为.csv文件(.csv文件不存在)                                
    /**
     * 下载 CSV 数据为CSV文件
     * $data=array (array('张三','男','33','php'),array ('李三','男','33','Java'));
     * $title_arr=array ('姓名','性别','年龄','工作');
     * 注意。 默认csv文件字符串需要 ‘ " ’ 环绕,否则导入导出操作时可能发生异常。
     */
      public function export_csv(&$data, $title_arr, $file_name = '') {
            ini_set("max_execution_time", "3600");
            $csv_data = '';
            /** 标题 */
            $nums = count($title_arr);
            for ($i = 0; $i < $nums; ++$i) {
                if($i < $nums -1)
                {
                   $csv_data .= '"' . $title_arr[$i] . '",';
                }
                else
                {
                   $csv_data .= '"' . $title_arr[$nums - 1] . "\"\r\n";                
                }
            }
            /** 内容 */
            foreach ($data as $k => $row) {
                for ($i = 0; $i < $nums - 1; ++$i) {
                    $row[$i] = str_replace("\"", "\"\"", $row[$i]);
                    if( $i < $nums - 1)
                    {
                      $csv_data .= '"' . $row[$i] . '",';
                    }
                    else
                    {
                      $csv_data .= '"' . $row[$nums - 1] . "\"\r\n";
                    }
                }
                unset($data[$k]);
            }
            $csv_data = mb_convert_encoding($csv_data, "cp936", "UTF-8");
            $file_name = empty($file_name) ? date('Y-m-d-H-i-s', time()) : $file_name;
            if (strpos($_SERVER['HTTP_USER_AGENT'], "MSIE")) { // 解决IE浏览器输出中文名乱码的bug
             $file_name = urlencode($file_name);
             $file_name = str_replace('+', '%20', $file_name);
            }
            $file_name = $file_name . '.csv';
            header("Content-type:text/csv;");
            header("Content-Disposition:attachment;filename=" . $file_name);
            header('Cache-Control:must-revalidate,post-check=0,pre-check=0');
            header('Expires:0');
            header('Pragma:public');
            echo $csv_data;
        }
$file = 'score.csv';
$fh = fopen($file,'rb');
/*
思路1:每次读一行,
每一行的内容再逗号拆成数组

feof — 测试文件指针是否到了文件结束的位置

 
while(!feof($fh)) {
    $row = fgets($fh);
    print_r(explode(',',$row));
}
*/
// fgetcsv 从文件指针中读入一行并解析 CSV 字段 ,返回一个包含这些字段的数组
while(!feof($fh)) {
    $row = fgetcsv($fh);
    print_r($row);
}
             $val['comment']=iconv("GB2312","utf-8",$val[1]);
string iconv ( string $in_charset , string $out_charset , string $str )
in_charset
输入的字符集。
out_charset
输出的字符集。

如果你在 out_charset 后添加了字符串 //TRANSLIT,将启用转写(transliteration)功能。这个意思是,当一个字符不能被目标字符集所表示时,它可以通过一个或多个形似的字符来近似表达。 如果你添加了字符串 //IGNORE,不能以目标字符集表达的字符将被默默丢弃。 否则,str 从第一个无效字符开始截断并导致一个 E_NOTICE

str
要转换的字符串。