gnugat/traversal

此包已被废弃,不再维护。未建议替代包。

用于哈希表(关联数组)遍历的服务(igorw/get-in 的分支)。

v2.0.0 2014-12-07 14:32 UTC

This package is auto-updated.

Last update: 2022-02-01 12:41:36 UTC


README

哈希表(关联数组)遍历的服务。

当处理嵌套的关联结构时,遍历它们可能相当痛苦。主要是因为需要进行大量的 isset 检查。

例如,要访问嵌套键 ['foo']['bar']['baz'],你必须这样做

$baz = (isset($data['foo']['bar']['baz'])) ? $data['foo']['bar']['baz'] : null;

已经足够了!Traversal 提供了一种更好的方法

$baz = Gnugat\Traversal\get_in($data, array('foo', 'bar', 'baz'));

注意TraversalIgorget-in 的分支,它提供了对 PHP 5.3 的支持。

SensioLabsInsight Travis CI

安装

使用 Composer 在您的项目中安装 Traversal

composer require gnugat/traversal:~2.0

使用

通过引入 Composer 的自动加载器使函数可用

<?php

require __DIR__.'/vendor/autoload.php';

进入

使用键列表从嵌套结构中检索值

$users = array(
    array('name' => 'Igor Wiedler'),
    array('name' => 'Jane Doe'),
    array('name' => 'Acme Inc'),
);

$name = Gnugat\Traversal\get_in($users, array(1, 'name'));
//= 'Jane Doe'

不存在的键返回 null

$data = array('foo' => 'bar'];

$baz = Gnugat\Traversal\get_in($data, array('baz'));
//= null

你可以提供一个默认值,该值将用于替代 null

$data = array('foo' => 'bar');

$baz = Gnugat\Traversal\get_in($data, array('baz'), 'qux');
//= 'qux'

更新在

将函数应用于嵌套结构中的特定位置的值

$data = array('foo' => array('answer' => 42));
$inc = function ($x) {
    return $x + 1;
};

$new = Gnugat\Traversal\update_in($data, array('foo', 'answer'), $inc);
//= array('foo' => array('answer' => 43))

你可以为函数提供可变数量的额外参数

$data = array('foo' => 'bar');
$concat = function (/* $args... */) {
    return implode('', func_get_args());
};

$new = Gnugat\Traversal\update_in($data, array('foo'), $concat, ' is the ', 'best');
//= array('foo' => 'bar is the best')

关联在

在特定位置设置一个值

$data = array('foo' => 'bar');

$new = Gnugat\Traversal\assoc_in($data, array('foo'), 'baz');
//= array('foo' => 'baz')

如果该值尚不存在,它也会设置该值

$data = [];

$new = Gnugat\Traversal\assoc_in($data, array('foo', 'bar'), 'baz');
//= array('foo' => array('bar' => 'baz'))

灵感

命名和实现灵感来自 clojureget-inupdate-inassoc-in 函数。