1 В избранное 0 Ответвления 0

OSCHINA-MIRROR/lkn2015-phpcookbook_3rd_translate

Присоединиться к Gitlife
Откройте для себя и примите участие в публичных проектах с открытым исходным кодом с участием более 10 миллионов разработчиков. Приватные репозитории также полностью бесплатны :)
Присоединиться бесплатно
Клонировать/Скачать
chapter1_strings_1.12_解析逗号分隔值.md 2.6 КБ
Копировать Редактировать Web IDE Исходные данные Просмотреть построчно История
mengqingshare Отправлено 13.08.2015 05:20 e6425ab

CHAPTER 1 Strings 第一章:字符串

1.12 解析逗号分隔值数据

问题

你有一些逗号分隔符格式的文件 (CSV格式),例如那些从数据库或者从 excel 中导出的数据,你想把这些数据解析成能用 PHP 操纵处理的数据格式。

解决方案

如果你的 CSV 格式的数据是在一个文件当中的 (或者来自一个 URL),你可以先用 fopen() 函数打开一个文件,然后用 fgetcsv() 函数去读取那些数据,【例1-30】展示了如何将 CSV 格式的数据输出到 HTML 的表格中。

【例1-30】

$fp = fopen($filename,'r') or die("can't open file");
print "<table>\n";
while($csv_line = fgetcsv($fp)) {
	print '<tr>';
	for ($i = 0, $j = count($csv_line); $i < $j; $i++) {
		print '<td>'.htmlentities($csv_line[$i]).'</td>';
	}
	print "</tr>\n";
}
print "</table>\n";
fclose($fp) or die("can't close file");

讨论

  • 默认情况下,fgetcsv() 函数会将每一行的数据全部读取。但是,如果你的数据每一行的平均长度大于 8192 字节,同时你又想让你的程序运行的更快,那么你最好是制定一下你每一行的长度而不是让 PHP 自己去计算长度。要实现上面说的这种制定行的长度限制,你需要传递一个数字给 fgetcsv() 函数的第二个参数,这个数字是一个比你的 CSV 文件最大行的长度还要大的数字 (计算长度的时候不要忘记了行尾的空白数目~)。如果你传递了 0 做为第二个参数那么 PHP 将会按照默认的方式去处理。

  • 还有一点就是,fgetcsv() 函数可以有第三个参数,那是一个分隔符,你可以指定一个分隔符,而不是用默认的逗号去分隔。可是如果使用了一个不一样的符号去分隔 CSV 数据,多少有一点违背 CSV 格式数据初衷的意思,毕竟 CVS 格式的数据就是为了做数据交换的,统一的分隔符就是逗号 ,

  • 不要尝试绕过 fgetcsv() 函数,妄想直接去读取数据的每一行并且用 explode() 函数并且用逗号 ,分隔然后输出一个数组。CSV 文件比想象当中的更加复杂,因为 CSV 文件可以去处理字段值的逗号。举个例子,在 CSV 文件中,数据文字中的逗号不会被当作字段分隔的逗号 (如果你用 explode() 函数的话你是无法去分辨出文字当中的逗号和字段中的逗号的)。使用 fgetcsv() 函数的话,就可以让你的你的代码避免这样的细微错误。

请参阅


【返回目录】

Опубликовать ( 0 )

Вы можете оставить комментарий после Вход в систему

1
https://api.gitlife.ru/oschina-mirror/lkn2015-phpcookbook_3rd_translate.git
git@api.gitlife.ru:oschina-mirror/lkn2015-phpcookbook_3rd_translate.git
oschina-mirror
lkn2015-phpcookbook_3rd_translate
lkn2015-phpcookbook_3rd_translate
master