fusonic / csv-reader
将CSV文件中的数据映射到类型化的PHP模型。
0.5.1
2024-09-16 12:25 UTC
Requires
- php: >=8.2
Requires (Dev)
- friendsofphp/php-cs-fixer: ^3.58
- infection/infection: ^0.29
- phpstan/phpstan: ^1.11
- phpstan/phpstan-deprecation-rules: ^1.2
- phpstan/phpstan-phpunit: ^1.4
- phpstan/phpstan-strict-rules: ^1.6
- phpunit/phpunit: ^11.2
- tomasvotruba/type-coverage: ^0.3
Suggests
- ext-intl: Required to use IntlValueConverter for advanced value conversion.
README
CSV Reader是一个强大的PHP 8库,允许您将CSV文件中的数据映射到强类型数据模型。它通过利用PHP 8的强类型属性/参数并自动将字符串值转换为类字段中定义的类型来实现这一点。
安装
使用composer从Packagist安装库。
composer require fusonic/csv-reader
需求
- PHP 8.2+
用法
只需定义一个表示CSV数据结构的类,并使用IndexMapping或TitleMapping属性来定义映射。您不需要映射所有列,只需映射模型中需要的列即可。
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。
支持的类型
intfloatstringbool(使用filter_var()与FILTER_VALIDATE_BOOLEAN,并支持如on、true、1这样的值)DateTimeDateTimeInterfaceDateTimeImmutable
如果您选择使用像?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请求。