Class TreeIterator
A Recursive iterator used to flatten nested structures and also exposes all Collection methods
Property Summary
-
$_mode protected
int
The iteration mode
Method Summary
-
__construct() public
Constructor
-
_createMatcherFilter() protected
Returns a callable that receives a value and will return whether or not it matches certain condition.
-
_extract() protected
Returns a column from $data that can be extracted by iterating over the column names contained in $path. It will return arrays for elements in represented with
{*}
-
_propertyExtractor() protected
Returns a callable that can be used to extract a property or column from an array or object based on a dot separated path.
-
_simpleExtract() protected
Returns a column from $data that can be extracted by iterating over the column names contained in $path
-
_unwrap() public deprecated
Backwards compatible wrapper for unwrap()
-
append() public
{@inheritDoc}
-
avg() public
{@inheritDoc}
-
buffered() public
{@inheritDoc}
-
cartesianProduct() public
{@inheritDoc}
-
chunk() public
{@inheritDoc}
-
chunkWithKeys() public
{@inheritDoc}
-
combine() public
{@inheritDoc}
-
compile() public
{@inheritDoc}
-
contains() public
{@inheritDoc}
-
countBy() public
{@inheritDoc}
-
each() public
{@inheritDoc}
-
every() public
{@inheritDoc}
-
extract() public
{@inheritDoc}
-
filter() public
{@inheritDoc}
-
first() public
{@inheritDoc}
-
firstMatch() public
{@inheritDoc}
-
groupBy() public
{@inheritDoc}
-
indexBy() public
{@inheritDoc}
-
insert() public
{@inheritDoc}
-
isEmpty() public
{@inheritDoc}
-
jsonSerialize() public
{@inheritDoc}
-
last() public
{@inheritDoc}
-
listNested() public
{@inheritDoc}
-
map() public
{@inheritDoc}
-
match() public
{@inheritDoc}
-
max() public
{@inheritDoc}
-
median() public
{@inheritDoc}
-
min() public
{@inheritDoc}
-
nest() public
{@inheritDoc}
-
optimizeUnwrap() protected
Unwraps this iterator and returns the simplest traversable that can be used for getting the data out
-
printer() public
Returns another iterator which will return the values ready to be displayed to a user. It does so by extracting one property from each of the elements and prefixing it with a spacer so that the relative position in the tree can be visualized.
-
reduce() public
{@inheritDoc}
-
reject() public
{@inheritDoc}
-
sample() public
{@inheritDoc}
-
shuffle() public
{@inheritDoc}
-
skip() public
{@inheritDoc}
-
some() public
{@inheritDoc}
-
sortBy() public
{@inheritDoc}
-
stopWhen() public
{@inheritDoc}
-
sumOf() public
{@inheritDoc}
-
take() public
{@inheritDoc}
-
through() public
{@inheritDoc}
-
toArray() public
{@inheritDoc}
-
toList() public
{@inheritDoc}
-
transpose() public
{@inheritDoc}
-
unfold() public
{@inheritDoc}
-
unwrap() public
{@inheritDoc}
-
zip() public
{@inheritDoc}
-
zipWith() public
{@inheritDoc}
Method Detail
__construct() ¶ public
__construct(RecursiveIterator $items, int $mode = RecursiveIteratorIterator::SELF_FIRST, int $flags = 0)
Constructor
Parameters
-
RecursiveIterator
$items The iterator to flatten.
-
int
$mode optional Iterator mode.
-
int
$flags optional Iterator flags.
_createMatcherFilter() ¶ protected
_createMatcherFilter(array $conditions): callable
Returns a callable that receives a value and will return whether or not it matches certain condition.
Parameters
-
array
$conditions A key-value list of conditions to match where the key is the property path to get from the current item and the value is the value to be compared the item with.
Returns
callable
_extract() ¶ protected
_extract(arrayArrayAccess $data, array $path): mixed
Returns a column from $data that can be extracted
by iterating over the column names contained in $path.
It will return arrays for elements in represented with {*}
Parameters
-
arrayArrayAccess
$data Data.
-
array
$path Path to extract from.
Returns
mixed
_propertyExtractor() ¶ protected
_propertyExtractor(string|callable $callback): callable
Returns a callable that can be used to extract a property or column from an array or object based on a dot separated path.
Parameters
-
string|callable
$callback A dot separated path of column to follow so that the final one can be returned or a callable that will take care of doing that.
Returns
callable
_simpleExtract() ¶ protected
_simpleExtract(arrayArrayAccess $data, array $path): mixed
Returns a column from $data that can be extracted by iterating over the column names contained in $path
Parameters
-
arrayArrayAccess
$data Data.
-
array
$path Path to extract from.
Returns
mixed
_unwrap() ¶ public
_unwrap(): Traversable
Backwards compatible wrapper for unwrap()
Returns
Traversable
buffered() ¶ public
buffered(): Cake\Collection\Iterator\BufferedIterator
{@inheritDoc}
Returns
Cake\Collection\Iterator\BufferedIterator
cartesianProduct() ¶ public
cartesianProduct(callable $operation = null, callable $filter = null): Cake\Collection\CollectionInterface
{@inheritDoc}
Parameters
-
callable
$operation optional -
callable
$filter optional
Returns
Cake\Collection\CollectionInterface
chunkWithKeys() ¶ public
chunkWithKeys(mixed $chunkSize, mixed $preserveKeys = true)
{@inheritDoc}
Parameters
-
$chunkSize
-
$preserveKeys optional
combine() ¶ public
combine(mixed $keyPath, mixed $valuePath, mixed $groupPath = null)
{@inheritDoc}
Parameters
-
$keyPath
-
$valuePath
-
$groupPath optional
compile() ¶ public
compile(mixed $preserveKeys = true)
{@inheritDoc}
Parameters
-
$preserveKeys optional
filter() ¶ public
filter(callable $c = null): Cake\Collection\Iterator\FilterIterator
{@inheritDoc}
Parameters
-
callable
$c optional
Returns
Cake\Collection\Iterator\FilterIterator
insert() ¶ public
insert(mixed $path, mixed $values): Cake\Collection\Iterator\InsertIterator
{@inheritDoc}
Parameters
-
$path
-
$values
Returns
Cake\Collection\Iterator\InsertIterator
listNested() ¶ public
listNested(mixed $dir = 'desc', mixed $nestingKey = 'children'): Cake\Collection\Iterator\TreeIterator
{@inheritDoc}
Parameters
-
$dir optional
-
$nestingKey optional
Returns
Cake\Collection\Iterator\TreeIterator
map() ¶ public
map(callable $c): Cake\Collection\Iterator\ReplaceIterator
{@inheritDoc}
Parameters
-
callable
$c
Returns
Cake\Collection\Iterator\ReplaceIterator
max() ¶ public
max(mixed $callback, mixed $type = SORT_NUMERIC)
{@inheritDoc}
Parameters
-
$callback
-
$type optional
min() ¶ public
min(mixed $callback, mixed $type = SORT_NUMERIC)
{@inheritDoc}
Parameters
-
$callback
-
$type optional
nest() ¶ public
nest(mixed $idPath, mixed $parentPath, mixed $nestingKey = 'children')
{@inheritDoc}
Parameters
-
$idPath
-
$parentPath
-
$nestingKey optional
optimizeUnwrap() ¶ protected
optimizeUnwrap(): Traversable|array
Unwraps this iterator and returns the simplest traversable that can be used for getting the data out
Returns
Traversable|array
printer() ¶ public
printer(string|callable $valuePath, string|callable|null $keyPath = null, string $spacer = '__'): Cake\Collection\Iterator\TreePrinter
Returns another iterator which will return the values ready to be displayed to a user. It does so by extracting one property from each of the elements and prefixing it with a spacer so that the relative position in the tree can be visualized.
Both $valuePath and $keyPath can be a string with a property name to extract or a dot separated path of properties that should be followed to get the last one in the path.
Alternatively, $valuePath and $keyPath can be callable functions. They will get the current element as first parameter, the current iteration key as second parameter, and the iterator instance as third argument.
Example
$printer = (new Collection($treeStructure))->listNested()->printer('name');
Using a closure:
$printer = (new Collection($treeStructure))
->listNested()
->printer(function ($item, $key, $iterator) {
return $item->name;
});
Parameters
-
string|callable
$valuePath The property to extract or a callable to return the display value
-
string|callable|null
$keyPath optional The property to use as iteration key or a callable returning the key value.
-
string
$spacer optional The string to use for prefixing the values according to their depth in the tree
Returns
Cake\Collection\Iterator\TreePrinter
reduce() ¶ public
reduce(callable $c, mixed $zero = null)
{@inheritDoc}
Parameters
-
callable
$c -
$zero optional
reject() ¶ public
reject(callable $c): Cake\Collection\Iterator\FilterIterator
{@inheritDoc}
Parameters
-
callable
$c
Returns
Cake\Collection\Iterator\FilterIterator
sortBy() ¶ public
sortBy(mixed $callback, mixed $dir = SORT_DESC, mixed $type = SORT_NUMERIC)
{@inheritDoc}
Parameters
-
$callback
-
$dir optional
-
$type optional
stopWhen() ¶ public
stopWhen(mixed $condition): Cake\Collection\Iterator\StoppableIterator
{@inheritDoc}
Parameters
-
$condition
Returns
Cake\Collection\Iterator\StoppableIterator
take() ¶ public
take(mixed $size = 1, mixed $from = 0)
{@inheritDoc}
Parameters
-
$size optional
-
$from optional
toArray() ¶ public
toArray(mixed $preserveKeys = true)
{@inheritDoc}
Parameters
-
$preserveKeys optional
transpose() ¶ public
transpose(): Cake\Collection\CollectionInterface
{@inheritDoc}
Returns
Cake\Collection\CollectionInterface
unfold() ¶ public
unfold(callable $transformer = null)
{@inheritDoc}
Parameters
-
callable
$transformer optional