php解析csv格式的字符串。

blueeon , 2010/07/16 09:38 , ABOUT LAMP , 评论(0) , 阅读(152) , Via 本站原创 | |
昨天遇到一个任务,需要解析一段csv格式的字符串,实际上是将android上的通讯录导出后得到的串。因为是直接从数据库提取出来,不像在文件中,你可以通过读文件的方式进行字符串分割。而且比较恶心的是,在网页上,这种字符串看起来并没有换行,完全是糅合在了一块的。
想了很多办法:
1.用js截取的办法,对js本身就不是很熟悉,试了一会就作罢了。
2.观察后用标志性字符分割字符串的办法。但是很可惜,几乎没有可以通用的标志性分割符号。所以在试了很久后作罢了。
最后,解决办法是:很无语的原来就是一个在html里面看不见的标记,\n,就可以解决了。
因为这种格式的串在文本里面换行都是通过\n来换行的。但是在html展示出来的时候是不起作用的,效果就是,在html源文件中,这些记录是换行的,但是在浏览器里面,就没有换行。所以才导致我走了很多弯路,悲哉。其实还是用的分割字符串的思路。
最后的解决办法是:
调用php的分割函数。String Array = explode("\n", String);这样子就按行存到数组中去了,然后再进一步解析各列,这个就好弄的多了。
我的解析函数:



/**
*处理csv字符串,返回按照行列的二维数组。
*
*/
function  processCsv($contacts)
{
    $contacts = explode("n", $contacts);
     $count= count($contacts);//统计csv串行数目
     $showString=array(array());//传递到view包含html的字符串
    $i=0;
     while($i<$count-1)
    {
        $csvString =  explode(",",$contacts[$i]);
        //这个是为了去掉每一行最后一个 n 符号,故意舍去最后一个
         unset($csvString[35]);
        $showString[$i]=$csvString;
         $i++;
    }
    return $showString;
}



另外一个是将二位数组转换回csv字符串:
 /**
*根据传入的二位数组构造csv格式的字符串
*$conn 为数据库链接
*/
 function buildCsv($arrayString)
{
    $csvString='';
    
    foreach($arrayString as $line)
    {
        foreach ($line as $row)
            $csvString=$csvString.$row.',';
        $csvString.="\n";
    }
    return $csvString;
}

Creative Commons License
Creative Commons License
本作品适用 署名-非商业性-禁止演绎 作品 CC 2.5 中国 并依循所适用的授权条款.
Tags: , , ,
发表评论

昵称

网址

电邮

打开HTML 打开UBB 打开表情 隐藏 记住我 [登入] [注册]