Symfony-Property-Access-like tree manipulation helper

0.1.1 2018-01-11 12:30 UTC

This package is not auto-updated.

Last update: 2020-09-18 08:52:02 UTC


Packagist CircleCI/master Coveralls/master Scrutinizer/master

This tiny project allows to read, enumerate and write properties / elements in a nested tree consisting of arrays and objects.

It is very close to symfony/property-access, but have two differences:

  • This library treats array elements and object properties the same way, providing a unified tree access. This may be both desirable and not, depending on real application, so property-access may be more useful for you.
  • This library allows to enumerate properties of a specific node.


composer require ama-team/tree-access



$object = new stdClass();
$object->values = ['apples' => 'green'];
$root = [$object];

$accessor = AmaTeam\TreeAccess\TreeAccess::createAccessor();

// 'green'
$color = $accessor->read($root, '0.values.apples');
// List of AmaTeam\TreeAccess\API\NodeInterface
$values = $accessor->enumerate($root, '0.values');
// NodeInterface that got updated
$accessor->write($root, '0.values.melon', 'yellow');
// false
$accessor->exists($root, '0.values.watermelon');

Setters / getters support is already bundled in, and accessing missing nodes will throw an exception (except when setting leaf of existing node).


Accessor already provides additional method that allows alternative manipulation interface:


$object = new stdClass();
$object->values = ['apples' => 'green'];
$root = [$object];

$accessor = AmaTeam\TreeAccess\TreeAccess::createAccessor();

$activeNode = $accessor->wrap($object);
foreach ($activeNode->enumerate() as $child) {
    $child->getChild('values')->setChild('lemon', 'yellow');
    $child->setChild('processed', true);


As of 0.1.x, possible performance optimizations are sacrificed for ease of use. This library doesn't promote performance (at least for now) at all.


Feel free to send PR to dev branch

Dev branch state

CircleCI/dev Coveralls/dev Scrutinizer/dev


MIT License / AMA Team, 2018