cocur/vale

Vale 是一个辅助工具,允许您在任意嵌套的数组和对象中获取和设置值。

v0.2 2015-03-24 10:17 UTC

This package is auto-updated.

Last update: 2024-09-20 09:38:38 UTC


README

Vale 帮助您处理复杂的数据结构。轻松获取、设置、取消设置并检查深层次嵌套数组或对象中值的存取。

Build Status Windows Build status Scrutinizer Code Quality Code Coverage StyleCI

由欧洲维也纳的 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 中指定的元素。以下变体将按此顺序尝试

  1. $data[$key]
  2. $data->$key()
  3. $data->get$Key()
  4. $data->get($key)
  5. $data->has$Key()
  6. $data->has($key)
  7. $data->is$Key()
  8. $data->is($key)
  9. $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

设置 利用与 获取 相同的方法遍历嵌套数据结构,并尝试以下变体来设置值

  1. $data[$key] = $value
  2. $data->$key($value)
  3. $data->set$Key($value)
  4. $data->set($key, $value)
  5. $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

检查存在 利用与 获取 相同的方法遍历嵌套数据结构,并尝试以下变体来检查元素的存在

  1. isset($data[$key])
  2. isset($data->$key)
  3. $data->has$Key()
  4. $data->has($key)
  5. $data->is$Key()
  6. $data->is($key)
  7. $data->$key()
  8. $data->get$Key()

涉及方法调用的变体(如 has$Key()has())如果方法返回 true 或计算结果为 true 的值,则返回 true。如果方法返回计算结果为 false 的值(如 ''0null),则 检查存在 返回 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

移除 使用与 获取 相同的方法在嵌套数据结构中导航,并尝试以下变体来从数据结构中移除元素

  1. unset($data[$key])
  2. unset($data->>$key)
  3. $data->unset$Key()
  4. $data->remove$Key()
  5. $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 是 Cocur 的一个项目。您可以通过 Twitter 联系我们:@cocurco

许可证

Vale 适用 MIT 许可证。有关完整的版权和许可信息,请参阅与源代码一起分发的 LICENSE 文件。