parsecsv/php-parsecsv

PHP CSV 数据解析器

1.3.2 2021-11-07 14:15 UTC

This package is auto-updated.

Last update: 2024-08-29 15:33:36 UTC


README

PHPUnit

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, ',');

有关更复杂的示例,请参阅 testsexamples 目录。

测试覆盖率

所有测试都位于 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问题报告。

致谢

贡献者

代码贡献者

本项目之所以存在,要归功于所有贡献者。

请查看项目贡献者页面上的完整列表。

许可证

(MIT许可证)

版权所有 (c) 2014 Jim Myhrberg。

特此授予任何获得此软件及其相关文档副本(以下简称“软件”)的个人免费、无限制地使用、复制、修改、合并、发布、分发、再许可和/或出售软件副本的权限,并允许软件提供方为此目的使用软件,前提是遵守以下条件:

上述版权声明和本许可声明应包含在软件的所有副本或主要部分中。

软件按“现状”提供,不提供任何明示或暗示的保证,包括但不限于适销性、适用于特定目的和无侵犯权利的保证。在任何情况下,作者或版权所有者均不对任何索赔、损害或其他责任负责,无论该责任基于合同、侵权或其他原因,无论该索赔、损害或其他责任是由于、源于或与软件或软件的使用或其他方式有关。

Build Status