This repo is READ ONLY, in order to contribute to Flow PHP project, please open PR against flow monorepo.
Changes merged to monorepo are automatically propagated into sub repositories.
composer require flow-php/array-dot:1.x@dev
Array Dot is a set of functions that allows to manipulate PHP arrays using custom dot notation known from JavaScript. This implementation brings some custom syntax which will be explained bellow.
<?php
array_dot_get(array $array, string $path) : mixed;
array_dot_set(array $array, string $path, mixed $value) : mixed;
array_dot_rename(array $array, string $path, string $newName) : mixed;
array_dot_exists(array $array, string $path) : bool;
array_dot_steps(string $path) : array;
<?php
$array = [
'foo' => [
'bar' => [
'baz' => 1000
]
]
];
$value = array_dot_get('foo.bar.baz'); // 1000
$array = array_dot_set([], 'foo.bar.baz', 1000); // ['foo' => ['bar' => ['baz' => 1000]]];
In above example foo.bar.baz
is path which also supports integer keys. For exmaple
foo.0.baz
.
foo
, bar
, baz
represents single steps (keys) of path.
?
- nullsafe*
- wildcard?*
- nullsafe wildcar
{}
- multipath
Supported in functions:
array_dot_get
Dot notation is strict by default, which means that if any step of path is not present, function will throw exception.
This behavior can be changed by ?
nullsafe operator.
<?php
$array = [
'foo' => [
'bar' => [
'baz' => 1000
]
]
];
$value = array_dot_get('foo.bar.nothing'); // InvalidPathException
$value = array_dot_get('foo.bar.?nothing'); // null
Nullsafe does not need to be used with the last step of path.
<?php
$array = [
'foo' => [
'fii' => [
'oop' => 1000
]
]
];
$value = array_dot_get('foo.?bar.nothing'); // null
Supported in functions:
array_dot_get
array_dot_set
array_dot_rename
Wildcard operator allows to access all paths in nested arrays.
<?php
$array = [
'users' => [
[
'id' => 1
],
[
'id' => 2
],
]
];
$value = array_dot_get('foo.*.id'); // [1, 2]
Supported in functions:
array_dot_get
Nullsafe Wildcard operator allows to access all paths in nested arrays for non symetric collections.
<?php
$array = [
'users' => [
[
'id' => 1,
'name' => 'John'
],
[
'id' => 2
],
]
];
$value = array_dot_get('foo.*.name'); // ['John']
Supported in functions:
array_dot_get
Get only selected keys from nested array
<?php
$array = [
'users' => [
[
'id' => 1,
'name' => 'John',
'status' => 'active',
],
[
'id' => 2,
'name' => 'Mikel',
'status' => 'active',
'role' => 'ADMIN'
],
]
];
$value = array_dot_get('foo.*.{id,?role}'); // [[1, null], [2, 'ADMIN']]
In order to install dependencies please, launch following commands:
composer install
composer install --working-dir ./tools
In order to execute full test suite, please launch following command:
composer build
It's recommended to use pcov for code coverage however you can also use
xdebug by setting XDEBUG_MODE=coverage
env variable.