蛋白质/地图

处理键值数据仓库

1.0.4 2019-05-29 14:14 UTC

This package is auto-updated.

Last update: 2024-08-29 05:12:36 UTC


README

蛋白质 | 地图

处理键值数据仓库

安装

composer require proteins/map

通过

use Proteins\Map;

构建字典

字典是一个行为类,必须由另一个类扩展,否则值仓库将被共享。

class State extends Dictionary {}

设置值

您可以通过 get 方法通过键路径设置值。

有效的键路径是由 . 分隔的任意深度的字符串序列。

示例

  • test
  • alpha.beta
  • pages.section.text_block.3
State::set('options.use_cache',false);

State::set('users.whitelist',[
	'frank.ciccio',
	'walter.submarine',
	'pepen.spacca',
]);

获取值

您可以通过 get 方法从键路径获取值。

echo State::get('users.whitelist.1'); // walter.submarine

您可以选择传递默认值,以便在找不到请求的键时返回。如果传递了可调用对象,则返回的值将被使用。

print_r( State::get('a.test',['b'=>123]) ); // Array( [b] => 123 )
echo State::get('a.test.b'); // 123

获取所有值

您可以通过 all 方法获取所有键值作为关联数组。

$all_data = State::all();

结果

Array (
    [users] => Array (
        [whitelist] => Array(
            [0] => frank.ciccio
            [1] => walter.submarine
            [2] => pepen.spacca
        )
    )
)

清除地图

您可以通过 clear 方法从地图中清除所有值。

State::clear();

合并数据

通过 merge 方法将值通过关联数组传递给地图。第二个可选参数将定义合并数据是从右到左还是从左到右(默认为 false = 从左到右)。

设置初始数据

State::clear();
State::merge([
    'user' => [
        'name' => 'Simon',
        'role' => 'Villain',
    ],
]);
Array (
    [user] => Array (
            [name] => Simon
            [role] => Villain
        )
)

标准合并(从左到右)

State::merge([
    'user' => [
        'name' => 'Frank',
    ],
    'happy' => true,
]);
Array (
    [user] => Array (
            [name] => Frank
            [role] => Villain
        )
    [happy] => 1
)

反向合并(从右到左)

State::merge([
    'user' => [
        'name' => 'Frank',
    ],
    'happy' => true,
],true);
Array (
    [user] => Array (
            [name] => Simon
            [role] => Villain
        )
    [happy] => 1
)

获取多个值

您可以通过传递类型为

DESTINATION_KEY => Map_PATH

示例 :

MyService::init([
    'username'   =>  State::get('aws.username'),
    'password'   =>  State::get('aws.password'),
    'from'       =>  State::get('user.email'),
    'verbose'    =>  State::get('app.global.debug'),
]);

可以写成一个 get 调用,如下

MyService::init( State::get([
    'username'   =>  'aws.username',
    'password'   =>  'aws.password',
    'from'       =>  'user.email',
    'verbose'    =>  'app.global.debug',
]));