nackjicholson / file-parser
PHP 包,用于将文件中的数据解析成 PHP 数组。
Requires
- php: >=5.4
- symfony/yaml: ~2.5
Requires (Dev)
- phpunit/phpunit: ~4.2
This package is not auto-updated.
Last update: 2024-09-24 16:24:59 UTC
README
这是一个用于解析包含结构化数据的文件的 composer 包。
当前支持的格式有:
- Csv
- Json
- Yaml
- .ini
警告 由于短数组语法和 traits 的使用,仅支持 PHP 5.4 及以上版本。
示例
foobar.yml
foo: bar
example.php
<?php require_once '../vendor/autoload.php'; $fileParser = new \Nack\FileParser\FileParser(); print_r($fileParser->yaml('foobar.yml'));
输出
Array
(
[foo] => bar
)
安装
通过 composer
compser require nackjicholson/file-parser=~2.1
或者在 composer.json 中添加
"require": { "nackjicholson/file-parser": "~2.1" }
CSV
此库提供了三种将 CSV 文件解析为 PHP 数组的方法。通过传递一个包含选项的关联数组给每个 CSV 方法,提供对分隔符、包围符和转义选项的全面支持。选项默认为:
['delimiter' => ',', 'enclosure' => '"', 'escape' => '\\']
在 example/example.php
中有一个如何使用分号作为分隔符设置文件解析的示例。
::csv(mixed $file, array $options = [])
此方法提供了对文件的逐行解析。每行被转换为一个值数组。空行不会被跳过。
foo,bar
,empty first value
bingo,bango,bongo
$fileParser->csv('file.csv');
[
[ 'foo', 'bar' ],
[ '', 'empty first value' ],
[ null ],
[ 'bingo', 'bango', 'bongo' ]
]
::csvColumnar(mixed $file, array $options = [])
将 CSV 内容解析为结构化列数据。将 CSV 文件的第一行作为列标题,并将每个列标题附加到其关联的行值。
例如,一个描述联系人表的 CSV。
name,email,phone
will,willieviseoae@gmail.com,555-2242
bill,,
,,
第一行是表头 'name'、'email' 和 'phone'。第二行是完整的数据集。第三行有名字,但没有电子邮件和电话。第四行不是行,它是一个空行。
$fileParser->csvColumnar('contacts.csv');
[
[
'name' => 'will',
'email' => 'willieviseoae@gmail.com',
'phone' => '555-2242'
],
[
'name' => 'bill',
'email' => '',
'phone' => ''
]
]
::csvRows(mixed $file, array $options = [])
将 CSV 内容解析为每行使用第一个值作为键,后续值设置为值的结构。这对于描述 key => value
对或 key => [ values... ]
的 CSV 很理想。
foo,bar
bingo,bango,bongo
,,
,nope,not,a,chance
emptyValue,
$fileParser->csvRows('rows.csv');
[
'foo' => 'bar',
'bingo' => [ 'bango', 'bongo' ],
'emptyValue' => ''
]
如您所见,它忽略了空白行或键为空的行。
INI
::ini(mixed $file)
此方法将 PHP INI 配置文件解析为数组。它直接委托给 PHP 内置函数 parse_ini_file
。
$fileParse->ini('/etc/php55/php.ini');
JSON
::json(mixed $file)
将 JSON 文件解析为 PHP 数组。此解析策略直接委托给 PHP 内置的 json_decode
。
{ "foo": "bar" }
$fileParser->json('foobar.json');
[ 'foo' => 'bar' ]
YAML
::yaml(mixed $file)
将 YAML 文件解析为 PHP 数组。此解析策略直接委托给 symfony/Yaml。
foo: bar
$fileParser->yaml('foobar.yml');
[ 'foo' => 'bar' ]
SplFileInfo 和 SplFileObject 支持
除了为文件解析方法传递路径之外,您还可以提供 SplFileInfo
或 SplFileObject
对象。
$fileParser = new FileParser(); $splFileInfo = new \SplFileInfo('path/to/file.yml'); $fileParser->yaml($splFileInfo); $splFileObject = new \SplFileObject('path/to/file.json'); $fileParser->json($splFileObject);
贡献
报告问题,并随时在那里提出请求。给 GitHub 问题添加最佳标签。如果此库不执行您想要的功能,扩展它并不困难。此库基于策略模式,新策略可以以不同的方式解析数据。编写测试,并提交拉取请求。如果您不使用 100% 的覆盖率测试您的代码,您的 PR 将被拒绝。
联系我
Will Vaughn
推特: @nackjicholsonn