Array Functions
Nette\Utils\Arrays is a static class, which contains a handful of handy array functions.
All examples assume the following class alias is defined:
use Nette\Utils\Arrays;
get($array, $key, $default=NULL)
Returns $array[$key]
item. If it does not exist, Nette\InvalidArgumentException
is thrown, unless a
default return value is set as third argument.
// if $array['foo'] does not exist, throws an exception
$value = Arrays::get($array, 'foo');
// if $array['foo'] does not exist, returns 'bar'
$value = Arrays::get($array, 'foo', 'bar');
Argument $key
may as well be an array.
$array = array('color' => array('favorite' => 'red'), 5);
$value = Arrays::get($array, array('color', 'favorite'));
// returns 'red'
getRef(&$array, $key)
Gets reference to given $array[$key]
. If the index does not exist, new one is created with NULL
.
$valueRef = & Arrays::getRef($array, 'foo');
// returns $array['foo'] reference
Works with multidimensional arrays as well as get().
$value = & Arrays::get($array, array('color', 'favorite'));
// returns $array['color']['favorite'] reference
grep($array, $pattern, $flags=NULL)
Returns only those array items, which matches a regular expression $pattern
. Regex compilation or runtime error
throw Nette\RegexpException
.
$filteredArray = Arrays::grep($array, '~^\d+$~');
// returns only numerical items
Value PREG_GREP_INVERT
may be set as $flags
, which inverts the selection.
searchKey($array, $key)
Returns zero-indexed position of given array key. Returns FALSE
if key is not found.
$array = array('first' => 10, 'second' => 20);
$position = Arrays::searchKey($array, 'first'); // returns 0
insertAfter(&$array, $key, $inserted)
Appends array $inserted
after item with $key
index. If such a $key
does not exist, the
array is inserted at the end.
$array = array('first' => 10, 'second' => 20);
Arrays::insertAfter($array, 'first', array('hello' => 'world'));
// $array = array('first' => 10, 'hello' => 'world', 'second' => 20);
insertBefore(&$array, $key, $inserted)
Prepends content of $inserted
array into $array
before item with $key
index. If such a
$key
does not exist, the array is inserted at the beginning.
$array = array('first' => 10, 'second' => 20);
Arrays::insertBefore($array, 'first', array('hello' => 'world'));
// $array = array('hello' => 'world', 'first' => 10, 'second' => 20);
mergeTree($array1, $array2)
Merges two arrays recursively. Useful for combining tree structures. It behaves as the +
operator applied to
arrays, ie. it adds to keys/values of the second array to the the first one. In case of collision, values of first array
are used.
$array1 = array('color' => array('favorite' => 'red'), 5);
$array2 = array(10, 'color' => array('favorite' => 'green', 'blue'));
$array = Arrays::mergeTree($array1, $array2);
// $array = array('color' => array('favorite' => 'red', 'blue'), 5);
Values from second array are always appended to the first. Though the disappearance of value 10
might be
confusing, it's fine – both 5
of the first array and the 10
do have same key 0
.
renameKey(&$array, $oldKey, $newKey)
Renames a key.
$array = array('first' => 10, 'second' => 20);
Arrays::renameKey($array, 'first', 'renamed');
// $array = array('renamed' => 10, 'second' => 20);