parsecsv / php-parsecsv
PHP CSV 数据解析器
Requires
- php: >=5.5
Requires (Dev)
- phpunit/phpunit: ^6
- squizlabs/php_codesniffer: ^3.5
Suggests
- illuminate/support: Fluent array interface for map functions
This package is auto-updated.
Last update: 2024-08-29 15:33:36 UTC
README
ParseCsv 是一个易于使用的 PHP 类,可以正确地读取和写入 CSV 数据。它完全符合维基百科上概述的规范(因此符合 RFC 4180)。它具有许多高级功能,可以帮助您在处理 CSV 数据时更加轻松。
您可能根本不需要库:在使用 ParseCsv 之前,请确保 PHP 的内置函数 str_getcsv()
、fgetcsv()
或 fputcsv()
是否满足您的需求。
此库最初由 jimeh 在 2007 年初创建,因为当时 PHP 中处理 CSV 数据的内置和第三方支持不足。
特性
- ParseCsv 是 PHP 的完整且功能齐全的 CSV 解决方案
- 支持包含值、包含逗号、双引号和新行。
- 自动检测分隔符字符。
- 按特定字段/列排序数据。
- 易于数据操作。
- 基本的 SQL 类似 条件、偏移 和 限制 选项用于过滤数据。
- 检测格式不正确的输入的错误。它试图做到智能,但由于 CSV 的结构和像 Excel 这样的不同程序输出 CSV 数据的方式,因此不能完全信任 100%。
- 支持使用 PHP 的
iconv()
和mb_convert_encoding()
函数进行字符编码转换。 - 支持 PHP 5.5 及以上版本。它当然与 PHP 8.3 以及之间的所有版本兼容。
安装
使用 Composer 安装很简单。只需在命令行中运行以下命令
composer require parsecsv/php-parsecsv
如果您不使用 Drupal、Laravel、Symfony、Yii 等框架,您可能需要手动将 Composer 的自动加载器文件包含到您的 PHP 脚本中
require_once __DIR__ . '/vendor/autoload.php';
不使用 composer
不推荐,但从技术上讲是可行的:您还可以克隆存储库或提取 ZIP。要使用 ParseCSV,您必须添加 require 'parsecsv.lib.php';
行。
示例用法
解析具有编码转换的制表符分隔的 CSV 文件
$csv = new \ParseCsv\Csv(); $csv->encoding('UTF-16', 'UTF-8'); $csv->delimiter = "\t"; $csv->parseFile('data.tsv'); print_r($csv->data);
自动检测字段分隔符字符
$csv = new \ParseCsv\Csv(); $csv->auto('data.csv'); print_r($csv->data);
使用偏移解析数据
- 忽略前 X 行(例如,两行)
$csv = new \ParseCsv\Csv(); $csv->offset = 2; $csv->parseFile('data.csv'); print_r($csv->data);
限制返回的数据行数
$csv = new \ParseCsv\Csv(); $csv->limit = 5; $csv->parseFile('data.csv'); print_r($csv->data);
获取数据行总数,而不解析整个数据
- 如果存在,则排除标题行(请参阅 $csv->header 属性)
$csv = new \ParseCsv\Csv(); $csv->loadFile('data.csv'); $count = $csv->getTotalDataRowCount(); print_r($count);
获取每列的最常见数据类型
$csv = new \ParseCsv\Csv('data.csv'); $csv->getDatatypes(); print_r($csv->data_types);
修改 CSV 文件中的数据
更改数据值
$csv = new \ParseCsv\Csv(); $csv->sort_by = 'id'; $csv->parseFile('data.csv'); # "4" is the value of the "id" column of the CSV row $csv->data[4] = array('firstname' => 'John', 'lastname' => 'Doe', 'email' => '[email protected]'); $csv->save();
用引号包围每个数据值
$csv = new \ParseCsv\Csv(); $csv->parseFile('data.csv'); $csv->enclose_all = true; $csv->save();
替换字段名称或设置缺少的名称
$csv = new \ParseCsv\Csv(); $csv->fields = ['id', 'name', 'category']; $csv->parseFile('data.csv');
将行/条目添加到 CSV 文件末尾
仅在您确切知道文件结构的情况下推荐。
$csv = new \ParseCsv\Csv(); $csv->save('data.csv', array(array('1986', 'Home', 'Nowhere', '')), /* append */ true);
将二维数组转换为 CSV 数据,并将标题发送到浏览器以将输出作为文件下载
您的网络应用用户会称此为导出。
$csv = new \ParseCsv\Csv(); $csv->linefeed = "\n"; $header = array('field 1', 'field 2'); $csv->output('movies.csv', $data_array, $header, ',');
有关更复杂的示例,请参阅 tests
和 examples
目录。
测试覆盖率
所有测试都位于 tests
目录中。要执行测试,请运行以下命令
composer install
composer run test
请注意,PHP 8.2及更高版本允许使用已弃用的@annotations
的PHPUnit版本。GitHub动作使用Rector将其转换为#[attributes]
。当将代码推送到GitHub时,将使用GitHub Actions执行测试。相关配置在文件.github/workflows/ci.yml
中。要本地运行test
动作,可以执行以下命令:
make local-ci
安全
如果您发现任何安全相关的问题,请通过电子邮件[email protected]而不是使用GitHub问题报告。
致谢
- ParseCsv基于Ming Hong Ng的CsvFileParser类。
贡献者
代码贡献者
本项目之所以存在,要归功于所有贡献者。
请查看项目贡献者页面上的完整列表。
许可证
(MIT许可证)
版权所有 (c) 2014 Jim Myhrberg。
特此授予任何获得此软件及其相关文档副本(以下简称“软件”)的个人免费、无限制地使用、复制、修改、合并、发布、分发、再许可和/或出售软件副本的权限,并允许软件提供方为此目的使用软件,前提是遵守以下条件:
上述版权声明和本许可声明应包含在软件的所有副本或主要部分中。
软件按“现状”提供,不提供任何明示或暗示的保证,包括但不限于适销性、适用于特定目的和无侵犯权利的保证。在任何情况下,作者或版权所有者均不对任何索赔、损害或其他责任负责,无论该责任基于合同、侵权或其他原因,无论该索赔、损害或其他责任是由于、源于或与软件或软件的使用或其他方式有关。