prowebcraft / dot
PHP 点表示法数组访问
0.1.0
2018-02-15 12:21 UTC
Requires
- php: >=5.4
Requires (Dev)
- phpunit/phpunit: ^6.5
This package is auto-updated.
Last update: 2024-09-04 23:36:25 UTC
README
使用点表示法轻松访问多维数组。使用点表示法,您的代码更简洁,处理深层数组更简单。
该类实现了PHP的ArrayAccess类,因此Dot对象也可以像普通数组一样使用,并附加点表示法。
使用Dot,您可以这样修改
echo $data['info']['home']['address'];
变为这样
echo $data->get('info.home.address');
甚至这样
echo $data['info.home.address'];
安装
通过Composer
composer require prowebcraft/dot
或者直接复制类文件Dot.php,并自己处理命名空间。
通过 Composer
composer require prowebcraft/dot
手动安装
- 下载最新版本
- 将文件提取到您的项目中
- require_once '/path/to/dot/src/Dot.php';
使用方法
此数组将作为本指南的参考
$array = [ 'user' => [ 'firstname' => 'John', 'lastname' => 'Smith' ], 'info' => [ 'kids' => [ 0 => 'Laura', 1 => 'Chris', 2 => 'Little Johnny' ], 'home' => [ 'address' => 'Rocky Road 3' ] ] ];
创建Dot对象
要开始一个空数组,只需创建一个新的Dot对象
$data = new \Prowebcraft\Dot;
如果您已经有了一个数组,将其注入到Dot对象中
$data = new \Prowebcraft\Dot($array);
创建Dot对象后设置数组
$data->setArray($array);
将数组作为引用设置,所有更改将直接应用于原始数组
$data->setReference($array);
设置值
例如,在'home'数组中设置电话号码
$data->set('info.home.tel', '09-123-456-789'); // Array style $data['info.home.tel'] = '09-123-456-789';
一次性设置多个值
$data->set([ 'user.haircolor' => 'blue', 'info.home.address' => 'Private Lane 1' ]);
如果值已存在,Dot将使用新值覆盖它。
获取值
echo $data->get('info.home.address'); // Default value if the path doesn't exist echo $data->get('info.home.country', 'some default value'); // Array style echo $data['info.home.address'];
获取所有存储的值
$values = $data->all(); `` Get a value from a path and remove it: ```php $address = $data->pull('home.address');
获取所有存储的值并移除它们
$values = $data->pull();
添加值
$data->add('info.kids', 'Amy');
一次性添加多个值
$data->add('info.kids', [ 'Ben', 'Claire' ]);
检查值是否存在
if ($data->has('info.home.address')) { // Do something... } // Array style if (isset($data['info.home.address'])) { // Do something... }
删除值
$data->delete('info.home.address'); // Array style unset($data['info.home.address']);
一次性添加多个值
$data->delete([ 'user.lastname', 'info.home.address' ]);
清除值
从路径删除所有值
$data->clear('info.home');
一次性清除多个路径
$data->clear([ 'user', 'info.home' ]);
清除所有数据
$data->clear();
排序值
您可以排序给定路径的值或所有存储的值。
排序路径的值
$kids = $data->sort('info.kids'); // Sort recursively $info = $data->sort('info');
排序所有值
$sorted = $data->sort(); // Sort recursively $sorted = $data->sort();
魔术方法
可以使用魔术方法来处理单级数据(无需点表示法)。以下示例不使用上述相同的数据数组。
设置值
$data->name = 'John';
获取值
echo $data->name;
检查值是否存在
if (isset($data->name)) { // Do something... }
删除值
unset($data->name);