robsonala/php-complex-parser

此包的最新版本(dev-master)没有可用的许可信息。

PHP 复杂 CSV 解析器

dev-master 2018-08-29 11:57 UTC

This package is auto-updated.

Last update: 2024-09-29 04:43:24 UTC


README

将复杂 CSV 解析为 JSON

Build Status

简单用法

$str = 'CN1339361,,,,,
,Week 51 2017,Week 52 2017,Week 01 2018,Week 02 2018,Week 03 2018
Sales,1,5,6,9,1
Stock,1,7,1,2,4
Forecast,3,7,0,3,3
,,,,,
CN1339987,,,,,
,Week 51 2017,Week 52 2017,Week 01 2018,Week 02 2018,Week 03 2018
Sales,6,7,1,3,7
Stock,2,6,0,2,4
Forecast,5,0,2,2,4';

$settings = json_encode([
    'Header' => [
        'Global' => false,
        'Position' => [
            'Line' => 1
        ]
    ],
    'Block' => [
        'Transpose' => false,
        'Size' => 6
    ],
    'Columns' => [
        [
            'Type' => ColumnType::Single()->getValue(),
            'Name' => 'partcode',
            'Position' => [
                'Line' => 0,
                'Column' => 0
            ]
        ],
        [
            'Type' => ColumnType::Multiple()->getValue(),
            'Name' => 'sales',
            'KeepHeader' => false,
            'Position' => [
                'Line' => 3,
                'Range' => [1, null] 
            ]
        ],
        [
            'Type' => ColumnType::Multiple()->getValue(),
            'Name' => 'stock',
            'KeepHeader' => false,
            'Position' => [
                'Search' => 'Stock',
                'SearchColumn' => 0,
                'Range' => [1, 4] 
            ]
        ],
        [
            'Type' => ColumnType::Multiple()->getValue(),
            'Name' => 'fcast',
            'KeepHeader' => false,
            'Position' => [
                'Search' => 'Forecast',
                'SearchColumn' => 0,
                'HeaderMatch' => 'Week [0-9]{1,2} 2018' 
            ]
        ]
    ]
]);

// Load CSV
$parser = new PHPComplexParser();
$parser->loadCsvStr($str);

// Load Settings
$parser->loadSettingsJson($settings);

$out = $parser->processData();
/*
$out =>
array(
    array(
        'partcode' => 'CN1339361',
        'sales' => array(1,7,1,2,4),
        'stock' => array(1,7,1,2),
        'fcast' => array(0,3,3)
    ),
    array(
        'partcode' => 'CN1339987',
        'sales' => array(2,6,0,2,4),
        'stock' => array(2,6,0,2),
        'fcast' => array(2,2,4)
    )
)
*/

设置选项

常规

标题

位置标题

位置列

枚举符

块分隔

列类型