fusonic/csv-reader

将CSV文件中的数据映射到类型化的PHP模型。

0.5.1 2024-09-16 12:25 UTC

This package is auto-updated.

Last update: 2024-09-16 12:38:44 UTC


README

License Latest Version Total Downloads php 8.2+

CSV Reader是一个强大的PHP 8库,允许您将CSV文件中的数据映射到强类型数据模型。它通过利用PHP 8的强类型属性/参数并自动将字符串值转换为类字段中定义的类型来实现这一点。

安装

使用composer从Packagist安装库。

composer require fusonic/csv-reader

需求

  • PHP 8.2+

用法

只需定义一个表示CSV数据结构的类,并使用IndexMappingTitleMapping属性来定义映射。您不需要映射所有列,只需映射模型中需要的列即可。

class Foo
{
    #[TitleMapping('Price')]
    public float $price;

    #[TitleMapping('Price')]
    public function setPrice(float $value): void
    {
        // Not implemented
    }
}

现在使用CsvReader类将CSV数据转换为您的对象模型

$reader = new CsvReader('myfile.csv');
foreach ($reader->readObjects(Foo::class) as $item) {
    var_dump($item);
}

提示:您也可以将resource传递给CsvReader而不是文件路径。这样,您还可以访问远程文件系统中的文件,例如,如果您正在使用league/flysystem

支持的类型

  • int
  • float
  • string
  • bool(使用filter_var()FILTER_VALIDATE_BOOLEAN,并支持如ontrue1这样的值)
  • DateTime
  • DateTimeInterface
  • DateTimeImmutable

如果您选择使用像?string这样的可空类型,如果CSV值是空字符串或'null'(不区分大小写),则将其映射为null

选项

有关选项的更多信息,请参阅CsvReaderOptions类。

IntlValueConverter

如果您需要从特定文化反序列化浮点数,您可以使用IntlValueConverter如下所示

$options = new CsvReaderOptions();
$options->valueConverter = new IntlValueConverter('de-AT');

$reader = new CsvReader($options);

注意:由于PHP支持将德国日期格式传递给DateTimeInterface的派生类,因此默认的ValueConverter实现隐式处理德国日期格式。

贡献

这是fusonic/php-extensions存储库的子树分割。请在那里创建您的pull请求。