https://github.com/philipp-riddle/xtraverse.php
PHP bundle which makes array traversing / inserting dead easy.
https://github.com/philipp-riddle/xtraverse.php
nested-arrays nested-objects php php7 traverse tree
Last synced: 3 months ago
JSON representation
PHP bundle which makes array traversing / inserting dead easy.
- Host: GitHub
- URL: https://github.com/philipp-riddle/xtraverse.php
- Owner: philipp-riddle
- Created: 2021-10-23T18:04:10.000Z (over 3 years ago)
- Default Branch: master
- Last Pushed: 2022-03-25T09:30:50.000Z (over 3 years ago)
- Last Synced: 2025-01-27T14:51:13.773Z (5 months ago)
- Topics: nested-arrays, nested-objects, php, php7, traverse, tree
- Language: PHP
- Homepage:
- Size: 37.1 KB
- Stars: 2
- Watchers: 1
- Forks: 0
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
Awesome Lists containing this project
README
# XTraverse.php
This bundle makes it dead easy to traverse through nested arrays/objects in PHP.
## Installation
### Via Composer
```terminal
composer require phiil/xtraverse
```
### File download
To use all the functions of this package simply download the ```src/``` directory.## Getting started
### Traversing paths
Paths are how you specify where you want to traverse to inside the nested object. Let's assume you want to get the title of the Block with ID 1 inside the 'blocks' array.Our nested object:
```php
$data = [
'blocks' => [
[
'id' => 1,
'title' => 'First block',
],
],
];
```Now we specify which element we want:
```php
$path = 'blocks[1].title';
```Every step is delimited with a dot ('.') - if you want to query for an ID simply append it to the path with closed brackets.
Now let the traversing begin:```php
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 exceptionecho $title;
```The above will output the following: ```First block```
### Updating a nested value
Updating a value also works with paths:```php
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;
```**Note:** The update method returns an object with the properties ```path```, ```data``` & ```insert```. Getting the data property from the object straight away is almost always the best option.
### Working with IDs
The traverse service can auto-increment IDs - meaning if you insert a nested object like:```php
use Phiil\XTraverse\Traverser;$object = [
'id' => null,
'title' => 'Second block',
];
$traverser = new Traverser();
$data = $traverser->update($object, 'blocks.$', $object)->data;
```The object inside ```$data``` will now have the ID of 2 (First Block: ID 1).
**Note:** The ```path.$``` syntax can be used if you want to add a block to a non-associative (only numeric keys) array.
## Running tests
To run tests run the following commands:
```terminal
composer install --dev
./vendor/bin/phpunit tests/
```## Problems? Issues?
Just post them here on Github or contact me via email: [[email protected]](mailto:[email protected]). Feel free to contribute!