PHP 点表示法数组访问

0.1.0 2018-02-15 12:21 UTC

This package is auto-updated.

Last update: 2024-09-04 23:36:25 UTC


README

基于 adbario/php-dot-notation

使用点表示法轻松访问多维数组。使用点表示法,您的代码更简洁,处理深层数组更简单。

该类实现了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

手动安装

  1. 下载最新版本
  2. 将文件提取到您的项目中
  3. 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);

许可证

MIT许可证