jbizzay / php-dot
具有点符号的结构化数组辅助工具
v0.5
2018-04-19 03:58 UTC
Requires (Dev)
- phpunit/phpunit: ^6.2
This package is not auto-updated.
Last update: 2024-09-23 14:54:52 UTC
README
此仓库未维护。如果您需要类似的功能,请查看此链接: https://github.com/adbario/php-dot-notation
帮助管理PHP中的数组,支持点符号。对配置、元数据或处理大型关联数组非常有用。
通常,处理大型数组既繁琐又容易出错。需要深入多个数组的层级,并检查isset,这并不愉快。
if (isset($data['level1']) && isset($data['level1']['level2'])) { $value = $data['level1']['level2']['key']; } else { $value = null; }
相反,您可以这样做
$dot = new Dot($data); $value = $dot->get('level1.level2.key');
如果点路径的任何部分不存在,它将简单地返回null,而不是抛出未定义索引错误。使用点符号工作使代码更易于阅读和编写。
用法
创建点
use Jbizzay\Dot; // Create empty dot $dot = new Dot; // Or, initialize with an array of data $data = [ 'stats' => [ 'web' => [ 'hits' => 99 ], 'mobile' => [ ] ] ]; $dot = new Dot($data);
获取
如果没有参数,获取将返回整个数据数组。传递点符号字符串以访问数据数组的部分。
$dot->get(); // Returns full data array $dot->get('stats.web.hits'); // Returns 99 $dot->get('stats.mobile.hits'); // Returns null $dot->get('some.random.undefined.key'); // Returns null
设置
您可以设置任何数据类型,包括可调用的函数。如果不存在任何级别,将创建关联数组。设置返回相同的Dot实例,允许方法链式调用。使用可调用类型将接收当前设置的值(如果存在)作为参数。
$dot ->set('stats.web.last_updated', new DateTime) ->set('stats.web.allow_tracking', true) ->set('stats.web.hits', function ($hits) { $hits++; return $hits; }); $dot->get('stats.web'); /* Returns: Array ( [hits] => 100 [last_updated] => DateTime Object ( [date] => 2017-07-21 14:50:34.000000 [timezone_type] => 3 [timezone] => America/Los_Angeles ) [allow_tracking] => 1 ) */
取消设置
取消设置一个值,返回点实例
$dot ->unset('path.to.value') ->unset('some.other.value');
存在
确定键是否已设置
$dot->has('stats.web'); // true $dot->has('some.random.key'); // false
定义
获取值,但如果键未设置,则使用值初始化键。您还可以使用可调用类型。默认情况下,使用数组初始化。返回点路径值
$dot->define('leads.emails'); // Sets to an array $hits = $dot->define('stats.mobile.hits', 0); $dot->define('stats.console.hits', function () { // This function is called if this key is not set yet return 0; });
合并
递归地将数组合并到点数组中。第一个参数可以是点路径、数组或返回数组的函数。第二个参数可以是数组或函数,但应仅在第一个参数是键的情况下使用。返回点实例
// Merge into whole data array $dot->merge([ 'stats' => [ 'web' => [ 'hits' => 123, 'leads' => 321 ] ] ]); $dot->get(); /* Returns: Array ( [stats] => Array ( [web] => Array ( [hits] => 123 [last_updated] => DateTime Object ( [date] => 2017-07-25 13:34:49.000000 [timezone_type] => 3 [timezone] => America/Los_Angeles ) [allow_tracking] => 1 [leads] => 321 ) [mobile] => Array ( ) ) ) */ // Merge array into a dot path $dot->merge('stats.mobile', [ 'issues' => 33 ]); // Merge using function $dot->merge('stats.mobile', function ($mobile) { return ['updated' => new DateTime]; }); // Merge into whole data array with function $dot->merge(function ($data) { return ['new' => 123]; });