nackjicholson/file-parser

PHP 包,用于将文件中的数据解析成 PHP 数组。

v2.1.0 2014-10-11 17:01 UTC

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 支持

除了为文件解析方法传递路径之外,您还可以提供 SplFileInfoSplFileObject 对象。

$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

邮箱: willieviseoae@gmail.com

推特: @nackjicholsonn