dingtao / simple-array-accessor
a simple lib to get/set array value with dot notation
0.2
2018-10-08 23:16 UTC
Requires
- php: ^5.3 || ^7.0
Requires (Dev)
- phpunit/phpunit: ^5
This package is not auto-updated.
Last update: 2024-10-08 04:16:41 UTC
README
a lib to set/get array value with dot notation
installation
composer require dingtao/simple-array-accessor
Usage
get value
use Accessor\ArrayAccessor; $accessor = new ArrayAccessor(array( "foo" => array( "bar" => array(1, 2, 3, 'buzz' => 'phar'), "phar" => array( array("a" => "b"), array("a" => "c"), array("d" => "e") ) ), "a.b.c" => "d" )); var_dump($accessor->get('foo')); // output: // array( // "bar" => array(1, 2, 3, 'buzz'), // "phar" => array( // array("a" => "b"), // array("a" => "c"), // array("d" => "e") // ) // ) var_dump($accessor->get('foo.bar[]')); // output: array(1, 2, 3, 'buzz') // equivelant to "$accessor->get('foo.bar')" var_dump($accessor->get('foo.bar')); // output: array(1, 2, 3, 'buzz') var_dump($accessor->get('foo.bar[1]')); // output: 2 var_dump($accessor->get('foo.bar.buzz')); // output: 'phar' var_dump($accessor->get('a.b.c')); // output: 'd' var_dump($accessor->get('foo.phar[].a')); // output: array("b", "c", null) var_dump($accessor->get('foo.phar[].a', 'not found')); // output: array("b", "c", 'not found')
set value
use Accessor\ArrayMutator; // with no given array $mutator = new ArrayMutator(); var_dump($mutator->set("foo", "bar")->getArrayCopy()); // output: // array( // "foo" => "bar" // ) $fooValue = array( "bar" => array(1, 2, 3, 'buzz' => 'phar'), "phar" => array( array("a" => "b"), array("a" => "c"), array("d" => "e") ) ); var_dump($mutator->set("foo", $fooValue)->getArrayCopy()); // output: // array( // "foo" => array( // "bar" => array(1, 2, 3, 'buzz' => 'phar'), // "phar" => array( // array("a" => "b"), // array("a" => "c"), // array("d" => "e") // ) // ) // ) var_dump($mutator->set("foo.bar.buzz", "updated")->getArrayCopy()); // output: // array( // "foo" => array( // "bar" => array(1, 2, 3, 'buzz' => 'updated'), // "phar" => array( // array("a" => "b"), // array("a" => "c"), // array("d" => "e") // ) // ) // ) var_dump($mutator->set("foo.phar[].a", "updated")->getArrayCopy()); // output: // array( // "foo" => array( // "bar" => array(1, 2, 3, 'buzz' => 'updated'), // "phar" => array( // array("a" => "updated"), // array("a" => "updated"), // array("d" => "e") // ) // ) // ) var_dump($mutator->set("foo.phar[0].a", "updated-updated")->getArrayCopy()); // output: // array( // "foo" => array( // "bar" => array(1, 2, 3, 'buzz' => 'updated'), // "phar" => array( // array("a" => "updated-updated"), // array("a" => "updated"), // array("d" => "e") // ) // ) // ) var_dump($mutator->set("foo.phar[0]", "updated-updated-updated")->getArrayCopy()); // output: // array( // "foo" => array( // "bar" => array(1, 2, 3, 'buzz' => 'updated'), // "phar" => array( // "updated-updated-updated", // array("a" => "updated"), // array("d" => "e") // ) // ) // ) var_dump($mutator->set("foo.phar", "updated-updated-updated")->getArrayCopy()); // equivelant to $mutator->set("foo.phar[]", "updated-updated-updated") // output: // array( // "foo" => array( // "bar" => array(1, 2, 3, 'buzz' => 'updated'), // "phar" => "updated-updated-updated" // ) // ) // with given array $array = array( "foo" => array( "bar" => array(1, 2, 3, 'buzz' => 'phar'), "phar" => array( array("a" => "b"), array("a" => "c"), array("d" => "e") ) ), "a.b.c" => "d" ); $mutator = new ArrayMutator($array) var_dump($mutator->set("a.b.c", "updated")->getArrayCopy()); // output: // array( // "foo" => array( // "bar" => array(1, 2, 3, 'buzz' => 'phar'), // "phar" => array( // array("a" => "b"), // array("a" => "c"), // array("d" => "e") // ) // ), // "a.b.c" => "updated" // )
Note: the key of element in array is better not to contain "." to avoid ambiguous meaning. However if "." is a compulsory character, please use it in root level but not child level, as below:
$arrayWithRegconisableKeys = array( "foo" => "bar", "buzz" => array(1, 2, 3) "a.b.c" => "d" ); $arrayWithUnregconisableKeys = array( "foo" => array( "a.b.c" => "d" ) );