phiil/xtraverse

PHP 扩展,使数组遍历和插入变得非常简单。

1.1 2022-03-25 09:30 UTC

This package is auto-updated.

Last update: 2024-09-25 14:52:45 UTC


README

此扩展使得在 PHP 中遍历嵌套数组/对象变得非常简单。

安装

通过 Composer

composer require phiil/xtraverse

文件下载

要使用此包的所有功能,只需下载 src/ 目录。

入门

遍历路径

路径是用来指定您想在嵌套对象内部遍历到的位置。假设您想获取 'blocks' 数组中 ID 为 1 的 Block 的标题。

我们的嵌套对象

$data = [
    'blocks' => [
        [
            'id' => 1,
            'title' => 'First block',
        ],
    ],
];

现在我们指定我们想要的元素

$path = 'blocks[1].title';

每一步都用点 ('.') 分隔 - 如果您想查询 ID,只需将其附加到路径上,并用闭合括号表示。

现在开始遍历

use Phiil\XTraverse\Traverser;

$traverser = new Traverser();
$title = $traverser->traverseData($path, $data, traverseArrayLimit: false); // we want a non-array value - pass "false" as the last argument or the service will throw an exception

echo $title;

上述代码将输出以下内容:First block

更新嵌套值

更新值也可以使用路径

use Phiil\XTraverse\Traverser;

// We want to update the title of the block we previously traversed to
$updatePath = 'blocks[1].title';

$traverser = new Traverser();
$data = $traverser->update($data, $path, 'New title')->data;

注意:更新方法返回一个包含 pathdatainsert 属性的对象。通常,直接从对象中获取数据属性是最好的选择。

使用 IDs

遍历服务可以自动递增 IDs - 意味着如果您插入一个嵌套对象,如

use Phiil\XTraverse\Traverser;

$object = [
    'id' => null,
    'title' => 'Second block',
];
$traverser = new Traverser();
$data = $traverser->update($object, 'blocks.$', $object)->data;

现在 $data 内部的对象将具有 ID 2(First Block: ID 1)。

注意:如果要将块添加到非关联数组(只有数字键),可以使用 path.$ 语法。

运行测试

要运行测试,请执行以下命令

composer install --dev
./vendor/bin/phpunit tests/

有问题?

只需在 Github 上发布它们,或者通过电子邮件联系我:philipp@riddle.com。欢迎贡献!