ama-team / tree-access
Symfony-Property-Access-like tree manipulation helper
Requires
- php: >= 5.6
Requires (Dev)
- allure-framework/allure-codeception: ^1.2
- codeception/codeception: ^2.3
- jakub-onderka/php-parallel-lint: ^0.9.2
- php-coveralls/php-coveralls: ^2.0
- phpmd/phpmd: ^2.6
- squizlabs/php_codesniffer: ^3.2
This package is not auto-updated.
Last update: 2024-11-23 04:22:34 UTC
README
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.
Installation
composer require ama-team/tree-access
Usage
<?php $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).
ActiveNode
Accessor already provides additional method that allows alternative manipulation interface:
<?php $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); }
Performance
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.
Contributing
Feel free to send PR to dev branch
Dev branch state
Licensing
MIT License / AMA Team, 2018