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
。
支持的类型
int
float
string
bool
(使用filter_var()
与FILTER_VALIDATE_BOOLEAN
,并支持如on
、true
、1
这样的值)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请求。