Class Hash
Library of array functions for manipulating and extracting data from arrays or 'sets' of data.
Hash
provides an improved interface, more consistent and predictable set of features over Set
. While it lacks the spotty support for pseudo Xpath, its more fully featured dot notation provides similar features in a more consistent implementation.
Copyright: Copyright (c) Cake Software Foundation, Inc. (http://cakefoundation.org)
License: MIT License
Located at Cake/Utility/Hash.php
Method Detail
_filtersource protected static
_filter( array $var )
Callback function for filtering.
Parameters
- array
$var
- Array to filter.
Returns
boolean
bool
_matchTokensource protected static
_matchToken( string $key , string $token )
Check a key against a token.
Parameters
- string
$key
- The key in the array being searched.
- string
$token
- The token being matched.
Returns
boolean
bool
_matchessource protected static
_matches( array $data , string $selector )
Checks whether or not $data matches the attribute patterns
Parameters
- array
$data
- Array of data to match.
- string
$selector
- The patterns to match.
Returns
boolean
Fitness of expression.
_simpleOpsource protected static
_simpleOp( string $op , array $data , array $path , mixed $values null )
Perform a simple insert/remove operation.
Parameters
- string
$op
- The operation to do.
- array
$data
- The data to operate on.
- array
$path
- The path to work on.
- mixed
$values
optional null - The values to insert when doing inserts.
Returns
array
data.
_splitConditionssource protected static
_splitConditions( string $token )
Split token conditions
Parameters
- string
$token
- the token being splitted.
Returns
array
array(token, conditions) with token splitted
_squashsource protected static
_squash( array $data , string $key null )
Helper method for sort() Squashes an array to a single hash so it can be sorted.
Parameters
- array
$data
- The data to squash.
- string
$key
optional null - The key for the data.
Returns
array
array
applysource public static
apply( array $data , string $path , callable $function )
Apply a callback to a set of extracted values using $function
. The function will get the extracted values as the first argument.
Example
You can easily count the results of an extract using apply(). For example to count the comments on an Article:
$count = Hash::apply($data, 'Article.Comment.{n}', 'count');
You could also use a function like array_sum
to sum the results.
$total = Hash::apply($data, '{n}.Item.price', 'array_sum');
Parameters
- array
$data
- The data to reduce.
- string
$path
- The path to extract from $data.
- callable
$function
- The function to call on each extracted value.
Returns
mixed
The results of the applied method.
checksource public static
check( array $data , string $path )
Test whether or not a given path exists in $data. This method uses the same path syntax as Hash::extract()
Checking for paths that could target more than one element will make sure that at least one matching element exists.
Parameters
- array
$data
- The data to check.
- string
$path
- The path to check for.
Returns
boolean
Existence of path.
See
Hash::extract()
Link
http://book.cakephp.org/2.0/en/core-utility-libraries/hash.html#Hash::checkcombinesource public static
combine( array $data , string $keyPath , string $valuePath null , string $groupPath null )
Creates an associative array using $keyPath
as the path to build its keys, and optionally $valuePath
as path to get the values. If $valuePath
is not specified, all values will be initialized to null (useful for Hash::merge). You can optionally group the values by what is obtained when following the path specified in $groupPath
.
Parameters
- array
$data
- Array from where to extract keys and values
- string
$keyPath
- A dot-separated string.
- string
$valuePath
optional null - A dot-separated string.
- string
$groupPath
optional null - A dot-separated string.
Returns
array
Combined array
Throws
CakeException
CakeException When keys and values count is unequal.
Link
http://book.cakephp.org/2.0/en/core-utility-libraries/hash.html#Hash::combinecontainssource public static
contains( array $data , array $needle )
Determines if one array contains the exact keys and values of another.
Parameters
- array
$data
- The data to search through.
- array
$needle
- The values to file in $data
Returns
boolean
true if $data contains $needle, false otherwise
Link
http://book.cakephp.org/2.0/en/core-utility-libraries/hash.html#Hash::containsdiffsource public static
diff( array $data , array $compare )
Computes the difference between two complex arrays. This method differs from the built-in array_diff() in that it will preserve keys and work on multi-dimensional arrays.
Parameters
- array
$data
- First value
- array
$compare
- Second value
Returns
array
Returns the key => value pairs that are not common in $data and $compare The expression for this function is ($data - $compare) + ($compare - ($data - $compare))
Link
http://book.cakephp.org/2.0/en/core-utility-libraries/hash.html#Hash::diffdimensionssource public static
dimensions( array $data )
Counts the dimensions of an array. Only considers the dimension of the first element in the array.
If you have an un-even or heterogenous array, consider using Hash::maxDimensions() to get the dimensions of the array.
Parameters
- array
$data
- Array to count dimensions on
Returns
integer
The number of dimensions in $data
Link
http://book.cakephp.org/2.0/en/core-utility-libraries/hash.html#Hash::dimensionsexpandsource public static
expand( array $data , string $separator '.' )
Expands a flat array to a nested array.
For example, unflattens an array that was collapsed with Hash::flatten()
into a multi-dimensional array. So, array('0.Foo.Bar' => 'Far')
becomes array(array('Foo' => array('Bar' => 'Far')))
.
Parameters
- array
$data
- Flattened array
- string
$separator
optional '.' - The delimiter used
Returns
array
array
Link
http://book.cakephp.org/2.0/en/core-utility-libraries/hash.html#Hash::expandextractsource public static
extract( array $data , string $path )
Gets the values from an array matching the $path expression. The path expression is a dot separated expression, that can contain a set of patterns and expressions:
-
{n}
Matches any numeric key, or integer. -
{s}
Matches any string key. -
{*}
Matches any value. -
Foo
Matches any key with the exact same value.
There are a number of attribute operators:
- =
, !=
Equality. - >
, <
, >=
, <=
Value comparison. - =/.../
Regular expression pattern match.
Given a set of User array data, from a $User->find('all')
call:
-
1.User.name
Get the name of the user at index 1. -
{n}.User.name
Get the name of every user in the set of users. -
{n}.User[id]
Get the name of every user with an id key. -
{n}.User[id>=2]
Get the name of every user with an id key greater than or equal to 2. -
{n}.User[username=/^paul/]
Get User elements with username matching^paul
.
Parameters
- array
$data
- The data to extract from.
- string
$path
- The path to extract.
Returns
array
An array of the extracted values. Returns an empty array if there are no matches.
Link
http://book.cakephp.org/2.0/en/core-utility-libraries/hash.html#Hash::extractfiltersource public static
filter( array $data , callable $callback array('self', '_filter') )
Recursively filters a data set.
Parameters
- array
$data
- Either an array to filter, or value when in callback
- callable
$callback
optional array('self', '_filter') - A function to filter the data with. Defaults to
static::_filter()
Which strips out all non-zero empty values.
Returns
array
Filtered array
Link
http://book.cakephp.org/2.0/en/core-utility-libraries/hash.html#Hash::filterflattensource public static
flatten( array $data , string $separator '.' )
Collapses a multi-dimensional array into a single dimension, using a delimited array path for each array element's key, i.e. array(array('Foo' => array('Bar' => 'Far'))) becomes array('0.Foo.Bar' => 'Far').)
Parameters
- array
$data
- Array to flatten
- string
$separator
optional '.' - String used to separate array key elements in a path, defaults to '.'
Returns
array
array
Link
http://book.cakephp.org/2.0/en/core-utility-libraries/hash.html#Hash::flattenformatsource public static
format( array $data , array $paths , string $format )
Returns a formatted series of values extracted from $data
, using $format
as the format and $paths
as the values to extract.
Usage:
$result = Hash::format($users, array('{n}.User.id', '{n}.User.name'), '%s : %s');
The $format
string can use any format options that vsprintf()
and sprintf()
do.
Parameters
- array
$data
- Source array from which to extract the data
- array
$paths
- An array containing one or more Hash::extract()-style key paths
- string
$format
- Format string into which values will be inserted, see sprintf()
Returns
array
An array of strings extracted from
$path
and formatted with $format
See
sprintf()Hash::extract()
Link
http://book.cakephp.org/2.0/en/core-utility-libraries/hash.html#Hash::formathttp://book.cakephp.org/2.0/en/core-utility-libraries/hash.html#Hash::format
getsource public static
get( array $data , string|array $path , mixed $default null )
Get a single value specified by $path out of $data. Does not support the full dot notation feature set, but is faster for simple read operations.
Parameters
- array
$data
- Array of data to operate on.
- string|array
$path
- The path being searched for. Either a dot separated string, or an array of path segments.
- mixed
$default
optional null - The return value when the path does not exist
Returns
mixed
The value fetched from the array, or null.
Throws
InvalidArgumentException
InvalidArgumentException
Link
http://book.cakephp.org/2.0/en/core-utility-libraries/hash.html#Hash::getinsertsource public static
insert( array $data , string $path , mixed $values null )
Insert $values into an array with the given $path. You can use {n}
and {s}
elements to insert $data multiple times.
Parameters
- array
$data
- The data to insert into.
- string
$path
- The path to insert at.
- mixed
$values
optional null - The values to insert.
Returns
array
The data with $values inserted.
Link
http://book.cakephp.org/2.0/en/core-utility-libraries/hash.html#Hash::insertmapsource public static
map( array $data , string $path , callable $function )
Map a callback across all elements in a set. Can be provided a path to only modify slices of the set.
Parameters
- array
$data
- The data to map over, and extract data out of.
- string
$path
- The path to extract for mapping over.
- callable
$function
- The function to call on each extracted value.
Returns
array
An array of the modified values.
Link
http://book.cakephp.org/2.0/en/core-utility-libraries/hash.html#Hash::mapmaxDimensionssource public static
maxDimensions( array $data )
Counts the dimensions of all array elements. Useful for finding the maximum number of dimensions in a mixed array.
Parameters
- array
$data
- Array to count dimensions on
Returns
integer
The maximum number of dimensions in $data
Link
http://book.cakephp.org/2.0/en/core-utility-libraries/hash.html#Hash::maxDimensionsmergesource public static
merge( array $data , mixed $merge )
This function can be thought of as a hybrid between PHP's array_merge
and array_merge_recursive
.
The difference between this method and the built-in ones, is that if an array key contains another array, then Hash::merge() will behave in a recursive fashion (unlike array_merge
). But it will not act recursively for keys that contain scalar values (unlike array_merge_recursive
).
Note: This function will work with an unlimited amount of arguments and typecasts non-array parameters into arrays.
Parameters
- array
$data
- Array to be merged
- mixed
$merge
- Array to merge with. The argument and all trailing arguments will be array cast when merged
Returns
array
Merged array
Link
http://book.cakephp.org/2.0/en/core-utility-libraries/hash.html#Hash::mergemergeDiffsource public static
mergeDiff( array $data , array $compare )
Merges the difference between $data and $compare onto $data.
Parameters
- array
$data
- The data to append onto.
- array
$compare
- The data to compare and append onto.
Returns
array
The merged array.
Link
http://book.cakephp.org/2.0/en/core-utility-libraries/hash.html#Hash::mergeDiffnestsource public static
nest( array $data , array $options array() )
Takes in a flat array and returns a nested array
Options:
-
children
The key name to use in the resultset for children. -
idPath
The path to a key that identifies each entry. Should be compatible with Hash::extract(). Defaults to{n}.$alias.id
-
parentPath
The path to a key that identifies the parent of each entry. Should be compatible with Hash::extract(). Defaults to{n}.$alias.parent_id
-
root
The id of the desired top-most result.
Parameters
- array
$data
- The data to nest.
- array
$options
optional array() - Options are:
Returns
array
of results, nested
Throws
InvalidArgumentException
When providing invalid data.
See
Hash::extract()
Link
http://book.cakephp.org/2.0/en/core-utility-libraries/hash.html#Hash::nestnormalizesource public static
normalize( array $data , boolean $assoc true )
Normalizes an array, and converts it to a standard format.
Parameters
- array
$data
- List to normalize
- boolean
$assoc
optional true - If true, $data will be converted to an associative array.
Returns
array
array
Link
http://book.cakephp.org/2.0/en/core-utility-libraries/hash.html#Hash::normalizenumericsource public static
numeric( array $data )
Checks to see if all the values in the array are numeric
Parameters
- array
$data
- The array to check.
Returns
boolean
true if values are numeric, false otherwise
Link
http://book.cakephp.org/2.0/en/core-utility-libraries/hash.html#Hash::numericreducesource public static
reduce( array $data , string $path , callable $function )
Reduce a set of extracted values using $function
.
Parameters
- array
$data
- The data to reduce.
- string
$path
- The path to extract from $data.
- callable
$function
- The function to call on each extracted value.
Returns
mixed
The reduced value.
Link
http://book.cakephp.org/2.0/en/core-utility-libraries/hash.html#Hash::reduceremovesource public static
remove( array $data , string $path )
Remove data matching $path from the $data array. You can use {n}
and {s}
to remove multiple elements from $data.
Parameters
- array
$data
- The data to operate on
- string
$path
- A path expression to use to remove.
Returns
array
The modified array.
Link
http://book.cakephp.org/2.0/en/core-utility-libraries/hash.html#Hash::removesortsource public static
sort( array $data , string $path , string $dir 'asc' , string $type 'regular' )
Sorts an array by any value, determined by a Set-compatible path
Sort directions
-
asc
Sort ascending. -
desc
Sort descending.
Sort types
-
regular
For regular sorting (don't change types) -
numeric
Compare values numerically -
string
Compare values as strings -
natural
Compare items as strings using "natural ordering" in a human friendly way. Will sort foo10 below foo2 as an example. Requires PHP 5.4 or greater or it will fallback to 'regular'
Parameters
- array
$data
- An array of data to sort
- string
$path
- A Set-compatible path to the array value
- string
$dir
optional 'asc' - See directions above. Defaults to 'asc'.
- string
$type
optional 'regular' - See direction types above. Defaults to 'regular'.
Returns
array
Sorted array of data
Link
http://book.cakephp.org/2.0/en/core-utility-libraries/hash.html#Hash::sort
© 2005–2016 The Cake Software Foundation, Inc.
Licensed under the MIT License.
CakePHP is a registered trademark of Cake Software Foundation, Inc.
We are not endorsed by or affiliated with CakePHP.
http://api.cakephp.org/2.7/class-Hash.html