pflorek/

elevator

将多维数组或任何 \Traversable 转换为一维数组。将一维或任何 \Traversable 提升为多维数组。

2.0.1 2017-03-17 00:00 UTC

This package is auto-updated.

Last update: 2024-09-17 08:52:39 UTC


README

Build Status Coverage Status Scrutinizer Code Quality Latest Stable Version Total Downloads Latest Unstable Version License Monthly Downloads Daily Downloads composer.lock

此库提供了一种简单的方法,可以将映射(关联数组)提升为树或将树展开为映射(关联数组)。树的节点键是映射的实际路径令牌,由分隔符分隔。

此库非常适合将扁平列表(如SQL结果)映射到文档。结果列名可以是目标文档的实际路径。您可以将结果行传递给 Elevator::up 并通过将提升后的树传递给JSON或XML序列化器进行序列化。在反序列化时,只需将反序列化的数组树传递给 Elevator::down 并提供例如SQL语句。

用法

提升

将带有实际路径的映射提升为树

use PFlorek\Elevator\Elevator;
use PFlorek\Elevator\ElevatorFactory;
use function \PFlorek\Elevator\array_elevate;

$flattened = [
    'World.Asia.Afghanistan.0' => '...',
    'World.Africa' => true,
    'World.Antarctica' => -25.2,
    'World.Europe' => new \stdClass(),
    'World.North America' => [],
];

// object oriented
$factory = ElevatorFactory::getInstance();
$elevator = $factory->create();
$elevator->up($flattened);

// or functional
$elevated = array_elevate($flattened);

var_dump($elevated);

//returns ["World"] => array(5) {
//  ["Asia"] => array(1) {
//    ["Afghanistan"] => array(1) {
//      [0] => string(3) "..."
//    }
//  }
//  ["Africa"] => bool(true)
//  ["Antarctica"] => float(-25.2)
//  ["Europe"]=> object(stdClass)#298 (0) {}
//  ["North America"]=> []
//}

展开

将树展开为映射,其键是节点键的实际路径

use PFlorek\Elevator\Elevator;
use PFlorek\Elevator\ElevatorFactory;
use function \PFlorek\Elevator\array_flatten;

$elevated = [
    'World' => [
        'Asia' => [
            'Afghanistan' => [
                '...'
            ]
        ],
        'Africa' => true,
        'Antarctica' => -25.2,
        'Europe' => new \stdClass(),
        'North America' => [],
    ]
];

// object oriented
$factory = ElevatorFactory::getInstance();
$elevator = $factory->create();
$elevator->down($flattened);

// or functional
$flattened = array_flatten($elevated);

var_dump($flattened);

//returns array(5) {
//  ["World.Asia.Afghanistan.0"] => string(3) "..."
//  ["World.Africa"] => bool(true)
//  ["World.Antarctica"] => float(-25.2)
//  ["World.Europe"] => object(stdClass) (0) { }
//  ["World.North America"] => array(0) { }
//}

安装

使用 Composer 安装此包

composer require pflorek/elevator

作者

贡献

欢迎贡献!

许可证

此包的所有内容均受 MIT许可证 的许可。