cocur / vale
Vale 是一个辅助工具,允许您在任意嵌套的数组和对象中获取和设置值。
Requires
- php: >=5.4
Requires (Dev)
- mockery/mockery: ~0.9
- phpunit/phpunit: ~4.5
This package is auto-updated.
Last update: 2024-09-20 09:38:38 UTC
README
Vale 帮助您处理复杂的数据结构。轻松获取、设置、取消设置并检查深层次嵌套数组或对象中值的存取。
由欧洲维也纳的 Florian Eckerstorfer 开发。
特性
- 获取、设置、取消设置并检查深层次嵌套数组或对象中值的存取
- 与任意数组和对象及其任意组合一起工作
- 在对象中使用获取器、设置器、取消设置器和检查器
$name = Vale::get($families, ['lannister', 'leader', 'children', 2, 'name']); // This would be equal to the following $name = null; if (isset($families['lannister']) && $families['lannister']) { if ($families['lannister']->getLeader()) { if (isset($families['lannister']->getLeader()->children[2]) && $families['lannister']->getLeader()->children[2]) { $name = $families['lannister']->getLeader()->children[2]->name(); } } }
安装
您可以使用 Composer 安装 Vale。
$ composer require cocur/vale
使用方法
您可以使用 Vale 提供的静态方法或创建 Vale 的实例。
use Cocur\Vale\Vale; $data = ['name' => 'Tyrion']; Vale::get($data, ['name']); // -> "Tyrion" Vale::set($data, ['name'], 'Cersei'); // -> ["name" => "Cersei"] Vale::has($data, ['name']); // -> true Vale::remove($data, ['name']); // -> [] $vale = new Vale(); $vale->getValue($data, ['name']); // -> "Tyrion" $vale->setValue($data, ['name'], 'Cersei'); // -> ["name" => "Cersei"] $vale->hasValue($data, ['name']); // -> true $vale->removeValue($data, ['name']); // -> []
对于扁平的数组和对象(即只有单层深度的数组和对象),您也可以使用字符串或整数作为键。这适用于静态方法以及实例方法。
Vale::get(['name' => 'Tyrion'], 'name'); // -> "Tyrion" Vale::get(['Tyrion'], 0); // -> "Tyrion"
获取
::get()
和 ->getValue()
返回指定元素的值。
mixed get(mixed $data, array|string|int $keys, mixed $default = null) mixed getValue(mixed $data, array|string|int $keys, mixed $default = null)
$data
是一个任意的数据结构$keys
是一个键数组,用于访问值。如果长度为1
,$keys
可以是一个字符串或整数$default
是当$data
中不存在值时返回的默认值
返回指定位置的元素或如果 $keys
为空,则返回原始的 $data
。
Vale 尝试不同的方式来访问 $keys
中指定的元素。以下变体将按此顺序尝试
$data[$key]
$data->$key()
$data->get$Key()
$data->get($key)
$data->has$Key()
$data->has($key)
$data->is$Key()
$data->is($key)
$data->$key
设置
::set()
和 ->setValue()
设置给定位置的元素的值。
mixed set(mixed $data, array|string|int $keys, mixed $value) mixed setValue(mixed $data, array|string|int $keys, mixed $value)
$data
是一个任意的数据结构$keys
是一个键数组,用于访问值。如果长度为1
,$keys
可以是一个字符串或整数$value
是元素的值
返回修改后的 $data
设置 利用与 获取 相同的方法遍历嵌套数据结构,并尝试以下变体来设置值
$data[$key] = $value
$data->$key($value)
$data->set$Key($value)
$data->set($key, $value)
$data->$key = $value
检查存在
::has()
和 ->hasValue()
返回元素是否存在
bool has(mixed $data, array|string|int $keys) bool hasValue(mixed $data, array|string|int $keys)
$data
是一个任意的数据结构$keys
是一个键数组,用于访问值。如果长度为1
,$keys
可以是一个字符串或整数
如果元素存在,返回 true
,否则返回 false
。
检查存在 利用与 获取 相同的方法遍历嵌套数据结构,并尝试以下变体来检查元素的存在
isset($data[$key])
isset($data->$key)
$data->has$Key()
$data->has($key)
$data->is$Key()
$data->is($key)
$data->$key()
$data->get$Key()
涉及方法调用的变体(如 has$Key()
或 has()
)如果方法返回 true
或计算结果为 true
的值,则返回 true
。如果方法返回计算结果为 false
的值(如 ''
、0
或 null
),则 检查存在 返回 false
。
删除
::remove()
和 ->removeValue()
从给定的数据结构中删除元素
mixed remove(mixed $data, array|string|int $keys) mixed removeValue(mixed $data, array|string|int $keys)
$data
是一个任意的数据结构$keys
是一个键数组,用于访问值。如果长度为1
,$keys
可以是一个字符串或整数
返回修改后的 $data
或者在 $keys
为空时返回 null
移除 使用与 获取 相同的方法在嵌套数据结构中导航,并尝试以下变体来从数据结构中移除元素
unset($data[$key])
unset($data->>$key)
$data->unset$Key()
$data->remove$Key()
$data->remove($key)
请注意,未使用 unset()
,因为在 PHP 中它是一个保留关键字。
变更日志
版本 0.2 (2015 年 3 月 24 日)
- 添加
has()
方法以检查键是否存在 - 添加
remove()
方法从项目移除键 - 改进了复杂结构的导航
- 主要重构,使代码更可重用和可测试
版本 0.1 (2015 年 3 月 15 日)
- 初始发布
动机
Vale 主要受到对更简单但更快的 Symfony PropertyAccess 组件实现的需求的启发。当在模板或配置文件中使用时,PropertyAccess 非常出色,即在执行之前编译和缓存的代码。然而,由于大量使用字符串解析和反射,PropertyAccess 不适合未编译的代码。另一个灵感来源是 Igor Wiedler 的 get-in
库,用于数组遍历。
名称:我使用了与《冰与火之歌》相关的字符串进行测试,由于经常需要编写 value
,我想到了 Vale。
作者
Vale 由 Florian Eckerstorfer (Twitter) 在欧洲的维也纳开发。
许可证
Vale 适用 MIT 许可证。有关完整的版权和许可信息,请参阅与源代码一起分发的 LICENSE 文件。