首页 > PHP > 将cvs数据转换php数组

将cvs数据转换php数组

前些日子从google webmaster上获取了一些csv文件,想将其转换为php数组后存入mysql数据库。于是分析一下这个cvs文件。

第一行:

网址,响应代码,新闻错误,上次检测到此错误的时间,类别,平台,上次抓取日期

第二行开始便是数据,与第一行一一对应:

http://www.phprm.com/develop/chain.html,404,,2015/11/15,找不到,桌面,2015/11/15

那么我们需要得到这样一个数组:

[0] => Array
    (
        [site_url] => http://www.phprm.com/develop/chain.html
        [response] => 404
        [error] => 
        [lasterror_time] => 2015/11/15
        [type] => 找不到
        [platform] => 桌面
        [lastgrab_time] => 2015/11/15
    )

使用php系统函数fgetcsv可以一行一行遍历,代码如下:

//先指定一下键名
$keys = array(
	'site_url',			//网址
	'response',			//404
	'error',			//错误
	'lasterror_time',	//上次检测到此错误的时间
	'type',				//类别
	'platform',			//平台
	'lastgrab_time',	//上次抓取日期
);

//读取并转换为数组
$result = csv2array($csv, 1000, ',', $keys);

/**
 * 从csv文件读取数据并转换为关联数组
 * @param   filepath       csv文件路径
 * @param   length         单行允许读取的最大长度
 * @param   delimiter      键名分隔符号
 * @param   replace_keys   如果传递了键名数组则作为关联数组的键名则替换为相应的键名
 * @return  mix         错误信息或者数组
 */
function csv2array($filepath, $length = 1000, $delimiter = ',', $replace_keys = array())
{
	if(($handle = fopen($filepath, 'r')) !== false)
	{
		// 一行一行地读取, 先读取第1行的数据
		$row = 0;
		$keys = array();
		// 如果读取成功将会返回一个数组到$data中, 注意该csv的每一行长度不能超过1000个字符
		while(($data = fgetcsv($handle,  $length, $delimiter)) !== false)
		{
			//重置$values
			$values = array();
			if($row == 0)
			{
				$keys = $data;
			}else{
				foreach($keys as $no => $key)
				{
					if(isset($replace_keys[$no]))
					{
						$values[$replace_keys[$no]] = $data[$no];
					}else{
						$values[$key] = $data[$no];
					}
					
				}
				$result[] = $values;
			}
			$row++;
		}
		fclose($handle);
	}
	return $result;
}

使用英文键名更合适一些,如果csv中使用了中文键名,可以传递第4个参数进行替换。但是,请注意csv文件的每一行记录不能超过第2个参数设定的长度,避免读取缺失。

永久地址:http://blog.zhengshuiguang.com/php/cvs2array.html

转载随意~请带上教程地址吧^^

标签:cvs

评论已关闭