php 把数组处理成csv格式

2 篇文章 0 订阅

把数组转成csv格式的文件,以及从csv格式的文件读入都有php的内置函数支持fgetcsv/fputcsv

读入一个csv格式的字符串也有str_getcsv可以办到,那么我想把一个数组变成csv格式的字符串呢?php里没有这样的函数。

参考csv的数据格式定义,我们可以自己简单写个函数实现这个功能。

<?php

class CsvHelper {
    /**
    * 转义成csv个格式的字段,用双引号包裹
    */
    public static function escapesToCsv($row, $enclosure) {
        switch (gettype($row)) {   
            case "NULL":     
                $field = ''; 
                break; 
            case "boolean":  
                $field = ($row == true) ? 'true': 'false'; 
                break;
            case "integer": 
            case "double":   
                $field = $row; 
                break; 
            case "string":   
                $field = str_replace('"', '""', $row); 
                break; 
            case "object": 
            case "resource": 
            default:         
                $field = ''; 
                break; 
        } 
        return $enclosure.$field.$enclosure;
    }

    public static function strPutCsv($array, $delimiter = ',', $enclosure = '"', $terminator = "\n") { 
        $fieldArray = array(); 
        
        foreach ($array as $key => $value) {
            if(is_array($value)) {
                $fieldArray[] = strPutCsv($value, $delimiter, $enclosure, ""); //中间的数组转换成csv,行分割符为空
            }else{
                $fieldArray[] = self::escapesToCsv($value, $enclosure);
            }
        }

        return implode($delimiter, $fieldArray).$terminator;
    } 

    public static function strGetCsv($input, $delimiter = ',', $enclosure = '"', $escape = '\\') {
        return str_getcsv($input, $delimiter, $enclosure, $escape);
    }
}
测试

$array = array(1, true, false, 'h\\\\e\llo', 'word,o', 'hello"php');
$str = CsvHelper::strPutCsv($array);
echo $str;

$arr = CsvHelper::strGetCsv($str);
var_dump($array);
输出
"1","true","false","h\\e\llo","word,o","hello""php"
array(6) {
  [0]=>
  int(1)
  [1]=>
  bool(true)
  [2]=>
  bool(false)
  [3]=>
  string(8) "h\\e\llo"
  [4]=>
  string(6) "word,o"
  [5]=>
  string(9) "hello"php"
}



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值