Arr Class

The arr class is a set of helper functions for working with arrays.

is_multi($arr, $all_keys = false)

The is_multi method checks if the array passed is multi-dimensional array or not.

Static Yes
Parameters
Param Default Description
$arr required The array to check.
$all_keys
false
Check that all elements are arrays.
Returns bool
Example
// Single array
$arr = array('one' => 1, 'two' => 2);
echo Arr::is_multi($arr);
// Result: false

// Multi-dimensional array
$arr = array('one' => array('test' => 1), 'two' => array('test' => 2), 'three' => array('test' => 3));
echo Arr::is_multi($arr);
// Result: true

// Multi-dimensional array with elements check
$arr = array('one' => array('test' => 1), 'two' => array('test' => 2), 'three' => 3);

echo Arr::is_multi($arr, false); // Result: true
echo Arr::is_multi($arr, true);  // Result: false

is_assoc($arr)

The is_assoc method checks if the array passed is an associative array or not.

Static Yes
Parameters
Param Default Description
$arr required The array to check.
Returns bool
Example
$arr = array('foo', 'bar', 'baz', 'yay');
echo Arr::is_assoc($arr);
// Result: false

$arr = array('foo' => 'foo', 'bar' => 'bar', 'baz' => 'baz', 'yay' => 'yay');
echo Arr::is_assoc($arr);
// Result: true

/*
 * Note that even if the '2' is defined as a string, PHP will store this internally
 * as an integer, and therefore this is NOT seen as an assoc array!
 */
$arr = array(0 => 'foo', 1 => 'bar', '2' => 'baz', 3 => 'yay');
echo Arr::is_assoc($arr);
// Result: false!

to_assoc($arr)

The to_assoc method turns a non-associative array into an associative array if it has an even number of segments.

Static Yes
Parameters
Param Default Description
$arr required The array to convert.
Returns array|null
Throws BadMethodCallException when the number of values in the given array is uneven
Example
$arr = array('foo', 'bar', 'baz', 'yay');
print_r(Arr::to_assoc($arr));

// Result:
Array
(
	["foo"] => 'bar'
	["baz"] => 'yay'
)

$arr = array('foo', 'bar', 'baz');
echo Arr::to_assoc($arr);
// Result: null

assoc_to_keyval($assoc, $key_field, $val_field)

The assoc_to_keyval method turns a multi-dimensional array into a key=>val array.

Static Yes
Parameters
Param Default Description
$assoc required The array to transform.
$key_field required The associative array field to map as the key.
$val_field required The associative array field to map as the value.
Returns array
Throws InvalidArgumentException when the first argument isn't an array or doesn't implement the Iterator interface.
Example
$people = array(
	array(
		"name" => "Jack",
		"age" => 21
	),
	array(
		"name" => "Jill",
		"age" => 23
	)
);

print_r(Arr::assoc_to_keyval($people, 'name', 'age'));

// Result:
Array
(
	["Jack"] => 21
	["Jill"] => 23
)

keyval_to_assoc($array, $key_field, $val_field)

The keyval_to_assoc method turns an array of key => values into a multi-dimensional associative array with the provided field names.

Static Yes
Parameters
Param Default Description
$array required The array to transform.
$key_field required The associative array field to map the key to.
$val_field required The associative array field to map the value to.
Returns array
Throws InvalidArgumentException when the first argument isn't an array or doesn't implement the Iterator interface.
Example
$people = array(
	"Jack" => 21,
	"Jill" => 23
);

print_r(Arr::keyval_to_assoc($people, 'name', 'age'));

// Result:
Array
(
	[0] => Array
	(
		["name"] => "Jack"
		["age"] => 21
	)
	[1] => Array
	(
		["name"] => "Jill"
		["age"] => 23
	)
)

average($array)

The average method takes all values of an array and returns the average value.

Static Yes
Parameters
Param Default Description
$array required Array of values to average.
Returns array
Example
echo Arr::average(array('1', 2, 4, '8'));
// Result: 3.75

flatten($array, $glue = ':', $reset = true)

The flatten method flattens a multi-dimensional array (both associative and indexed) down into a 1 dimensional array.

Static Yes
Parameters
Param Default Description
$array required The array to flatten.
$glue
:
The string used to glue the keys together with
$reset
true
Should we create a new array of values instead of merging them into the last array created by flatten?
Returns array
Example
$indexed = array(
	array("a"),
	array("b"),
	array("c"),
);

print_r(Arr::flatten($indexed, '_'));

// Result:
Array
(
	[0_0] => a
	[0_1] => b
	[0_2] => c
)

flatten_assoc($array, $glue = ':', $reset = true)

The flatten_assoc method flattens a multi-dimensional associative array down into a 1 dimensional associative array.

Static Yes
Parameters
Param Default Description
$array required The array to flatten.
$glue
:
The string used to glue the keys together with
$reset
true
Should we create a new array of values instead of merging them into the last array created by flatten_assoc?
Returns array
Example
$people = array(
	array(
		"name" => "Jack",
		"age"  => 21
	),
	array(
		"name" => "Jill",
		"age"  => 23
	)
);

print_r(Arr::flatten_assoc($people));

// Result:
Array
(
	[0:name] => Jack
	[0:age]  => 21
	[1:name] => Jill
	[1:age]  => 23
)

// Let's flatten another array on top
print_r(Arr::flatten_assoc(array(array("name" => "Humpty", "age" => 11)), ":", false));

// Result:
Array
(
	[0:name] => Humpty
	[0:age]  => 11
	[1:name] => Jill
	[1:age]  => 23
)

reverse_flatten($array, $glue = ':')

The reverse_flatten method unflattens a flattened multi-dimensional array (both associative and indexed) into its original form.

Static Yes
Parameters
Param Default Description
$array required The array to unflatten.
$glue
:
The string used to glue the keys together with
Returns array
Example
$flattened = array(
	'0_name' => 'James',
	'0_age'  => 24,
	'1_name' => 'John',
	'1_age'  => 34,
);

print_r(Arr::reverse_flatten($flattened, '_'));

// Result:
Array
(
	[0] => Array
		(
			[name] => James
			[age]  => 24
		)

	[1] => Array
		(
			[name] => John
			[age]  => 34
		)
)

filter_prefixed($array, $prefix, $remove_prefix = true)

The filter_prefixed method filters the array on a prefix. It returns an array where the key starts with the specified prefix.

Static Yes
Parameters
Param Default Description
$array required The array to filter.
$prefix required The string used to filter on
$remove_prefix
true
Remove or keep the prefix in the array key?
Returns array
Example
$arr = array(
	"user_name" => "John",
	"user_surname" => "Lastname",
	"project_name" => "Fuel",
	"project_type" => "Framework",
);

print_r(Arr::filter_prefixed($arr, "user_"));

// Result:
Array
(
	[name] => John
	[surname] => Lastname
)

// Let's keep the prefix
print_r(Arr::filter_prefixed($arr, "project_", false);

// Result:
Array
(
	[project_name] => Fuel
	[project_type] => Framework
)

remove_prefixed($array, $prefix)

The remove_prefixed method removes values from an array if they match a given prefix.

Static Yes
Parameters
Param Default Description
$array required The array to remove from.
$prefix required The string used to filter on
Returns array
Example
$arr = array(
	"user_name" => "John",
	"user_surname" => "Lastname",
	"project_name" => "Fuel",
	"project_type" => "Framework",
);

print_r(Arr::remove_prefixed($arr, "project"));

// Result:
Array
(
	[user_name] => John
	[user_surname] => Lastname
)

filter_suffixed($array, $suffix, $remove_suffix = true)

The filter_suffixed method filters the array on a suffix. It returns an array where the key ends with the specified suffix.

Static Yes
Parameters
Param Default Description
$array required The array to filter.
$suffix required The string used to filter on
$remove_suffix
true
Remove or keep the suffix in the array key?
Returns array
Example
$arr = array(
								"name_1" => "John",
								"surname_1" => "Lastname",
								"name_2" => "Ted",
								"surname_2" => "Surname",
								);

								print_r(Arr::filter_suffixed($arr, "_1"));

								// Result:
								Array
								(
								[name] => John
								[surname] => Lastname
								)

								// Let's keep the suffix
								print_r(Arr::filter_suffixed($arr, "_1", false);

								// Result:
								Array
								(
								[name_1] => John
								[surname_1] => Lastname
								)
							

remove_suffixed($array, $suffix)

The remove_suffixed method removes values from an array if they match a given suffix.

Static Yes
Parameters
Param Default Description
$array required The array to remove from.
$suffix required The string used to filter on
Returns array
Example
$arr = array(
								"name_1" => "John",
								"surname_1" => "Lastname",
								"name_2" => "Ted",
								"surname_2" => "Bear",
								);

								print_r(Arr::remove_suffixed($arr, "_1"));

								// Result:
								Array
								(
								[name_2] => Ted
								[surname_2] => Surname
								)
							

filter_keys($array, $keys, $remove = false)

The filter_keys method filters a given array to a set of keys. It returns an array that contains only the items whose keys are in the $keys array. Can also remove the specified $keys from an array.

Static Yes
Parameters
Param Default Description
$array required The array to filter.
$keys required Array of keys to filter the above array with.
$remove
false
If true, removes the $keys from the $array instead of fetching them.
Returns array
Example
$arr = array(
	"user_name" => "John",
	"user_surname" => "Lastname",
	"project_name" => "Fuel",
	"project_type" => "Framework",
);

print_r(Arr::filter_keys($arr, array('project_name', 'user_name')));

// Result:
Array
(
	[project_name] => Fuel
	[user_name] => John
)

// Let's remove some keys
print_r(Arr::filter_keys($arr, array('user_name', 'user_surname'), true));

// Result:
Array
(
	[project_name] => Fuel
	[project_type] => Framework
)

filter_recursive($array, $callback = null)

The filter_recursive method provides a recursive version of PHP's array_filter() function. Like its counterpart, you can optionally pass a callback function to determine what should be filtered.

Static Yes
Parameters
Param Default Description
$array required The array to filter.
$callback
null
A valid callback that returns a boolean.
Returns array
Example
$arr = array(
	"user_name" => "John",
	"user_surname" => "Lastname",
	"info" => array(
		0 => array(
			"data" => "a value",
		),
		1 => array(
			"data" => "",
		),
		2 => array(
			"data" => 0,
		),
	),
);

print_r(Arr::filter_recursive($arr));

// Result:
Array
(
	[user_name] => John
	[user_surname] => Lastname
	[info] => Array
	(
		[0] => Array
		(
			[data] => a value
		)
	)
)

// Let's use a callback
print_r(Arr::filter_recursive($arr, function($item){ return $item !== ""; }));

// Result:
Array
(
	[user_name] => John
	[user_surname] => Lastname
	[info] => Array
		(
			[0] => Array
				(
					[data] => a value
				)
			[1] => Array
				(
				)
			[2] => Array
				(
					[data] => 0
				)
		)
)

subset($array, $keys, $default = null)

Similar to filter_keys, the subset method uses the values in $keys to access this array and return the associated values. The difference is that subset returns all requested keys, providing $default for any missing keys.

This method uses get and set internally, so $keys may contain dotted notation.

Static Yes
Parameters
Param Default Description
$array required The array to filter.
$keys required Array of keys to filter the above array with.
$default
null
Keys not found in $array are given this value instead.
Returns array
Example
$arr = array(
	"user" => array(
		"name" => "John",
		"surname" => "Lastname",
	),
	"project" => array(
		"name" => "Fuel",
		"type" => "Framework",
	),
);

print_r(Arr::subset($arr, array('project.name', 'user.name')));

// Result:
Array
(
 	[project] => Array
		 (
			 [name] => Fuel
		 )
	[user] => Array
		 (
			 [name] => John
		 )
)

print_r(Arr::subset($arr, array('project.name', 'project.manager')));

// Result:
Array
(
 	[project] => Array
		 (
			 [name] => Fuel
			 [manager] =>
		 )
)

print_r(Arr::subset($arr, array('project.name', 'project.manager', 'user', 'not_provided'), 'Not Provided'));

// Result:
Array
(
 	[project] => Array
		 (
			 [name] => Fuel
			 [manager] => Not Provided
		 )
 	[user] => Array
		 (
			 [name] => John
			 [surname] => Lastname
		 )
	[not_provided] => Not Provided
)

get($array, $key, $default = false)

The get method returns the element of the given array using dot-notation, or a default if it is not set.

Static Yes
Parameters
Param Default Description
$array required The array to access
$key required The key requested in $array. If null is passed as key, the entire array is returned.
$default
false
The value to be returned if the requested key does not exist
Returns mixed. If you pass an array of keys, the return value will be an array with the result of all requested keys.
Example
$person = array(
	"name" => "Jack",
	"age" => "21",
	"location" => array(
		"city" => "Pittsburgh",
		"state" => "PA",
		"country" => "US"
	)
);

echo Arr::get($person, "name", "Unknown Name");
// Result: "Jack"

echo Arr::get($person, "job", "Unknown job");
// Result: "Unknown job"

// This method can also dive into arrays by using a dot to separate between keys
echo Arr::get($person, "location.city", "Unknown City");
// Result: "Pittsburgh"

set(&$array, $key, $value = null)

The set method sets the element of the given array using dot-notation.

WARNING: The original array is edited by reference

Static Yes
Parameters
Param Default Description
$array required The array to access
$key required The key requested in $array. If no key is passed, or null is passed as key value, the array is unset. If you pass an array of key -> value pairs, all the values in the array will be set.
$value
null
The value to be set. Ignored if $key is an array.
Returns void
Example
$person = array(
	"name" => "Jack",
	"age" => "21",
	"location" => array(
		"city" => "Pittsburgh",
		"state" => "PA",
		"country" => "US"
	)
);

Arr::set($person, "name", "John");
// $person['name'] is set to "John"

// This method can also dive into arrays by using a dot to separate between keys
Arr::set($person, "location.city", "Philadelphia");
// $person['location']['city'] is set to "Philadelphia"

// or set multiple values in one go
Arr::set($person, array("name" => "John", "location.city" => "Philadelphia"));

pluck($array, $key, $index = null)

The pluck method plucks values from a collection of arrays or objects.

Static Yes
Parameters
Param Default Description
$array required The array to pluck from
$key required The key to pluck from the arrays.
$index
null
Optional return array index.
Returns void
Example
$collection = array(
	array(
		'id' => 2,
		'name' => 'Bill',
		'surname' => 'Cosby',
	),
	array(
		'id' => 5,
		'name' => 'Chris',
		'surname' => 'Rock',
	),
	array(
		'id' => 7,
		'name' => 'Bert',
		'surname' => 'Visser',
	),
);

// Get an array of id's
$ids = \Arr::pluck($collection, 'id');
// array(2, 5, 7);

// Get an array of names with the id as the index
$names = \Arr::pluck($collection, 'name', 'id');
// array(2 => 'Bill', 5 => 'Chris', 7 => 'Bert');

delete(&$array, $key)

The delete method the element of the given array using dot-notation.
WARNING: The original array is edited by reference, only boolean success is returned

Static Yes
Parameters
Param Default Description
$array required The array to access
$key required The key requested in $array. If no key is passed, or null is passed as key value, the array is unset.
Returns mixed, true if the key was deleted, false if the key didn't exist. If you pass an array of keys, the return value will be an array with the result of all requested deletes.
Example
$person = array(
	"name" => "Jack",
	"age" => "21",
	"location" => array(
		"city" => "Pittsburgh",
		"state" => "PA",
		"country" => "US"
	)
);

$result = Arr::delete($person, "name");
// deleted $person['name'] from the array, returns true

// This method can also dive into arrays by using a dot to separate between keys
$result = Arr::delete($person, "location.city");
// deleted $person['location']['city'] from the array, returns true

// or delete multiple values in one go
$result = Arr::delete($person, array("name", "location.doesnotexist"));
// deleted $person['name'], returns array('name' => true, 'location.doesnotexist' => false)

insert(Array &$original, $value, $pos)

The insert method is mainly an array_splice alias with added error checking
WARNING: The original array is edited by reference, only boolean success is returned

Static Yes
Parameters
Param Default Description
$original required The array to use
$value required The value(s) to insert
$pos required The numeric position at which to insert, negative to count from the end backwards
Returns boolean
Example
$people = array("Jack", "Jill");

// Add one value
Arr::insert($people, "Humpty", 0);
print_r($people);
// Result:
Array
(
	[0] => Humpty
	[1] => Jack
	[2] => Jill
)

// Add multiple values
Arr::insert($people, array("Hansel", "Gretel"), 1);
print_r($people);
// Result:
Array
(
	[0] => Humpty
	[1] => Hansel
	[2] => Gretel
	[3] => Jack
	[4] => Jill
)

// Add an array
Arr::insert($people, array( array("name" => "Wolf", "teeth" => "sharp")), 0);
print_r($people);

// Result:
Array
(
	[0] => Array
		(
			[name] => Wolf
			[teeth] => sharp
		)

	[1] => Humpty
	[2] => Hansel
	[3] => Gretel
	[4] => Jack
	[5] => Jill
)

insert_assoc(array &$original, array $values, $pos)

The insert_assoc method inserts elements into an associative array, at the specified position.
WARNING: The original array is edited by reference, only boolean success is returned.

Static Yes
Parameters
Param Default Description
$original required The array to use
$values required Array with value(s) to insert
$pos required The location in the original array where the new values should be inserted. If a negative value is given, the position is counted from the back of the array.
Returns boolean, true on success, false if $pos is out of bounds.
Example
$character = array("name" => "Jack", "surname" => "Reacher");

Arr::insert_assoc($character, array("initial" => "P."), 1);
print_r($character);

// Result:
Array
(
	[name] => Jack
	[initial] => P.
	[surname] => Reacher
)

insert_before_key(Array &$original, $value, $key)

The insert_before_key method adds an element to an array before the key specified.
WARNING: The original array is edited by reference, only boolean success is returned.

Static Yes
Parameters
Param Default Description
$original required The array to use
$value required The value(s) to insert
$key required The key before which to insert
Returns boolean
Example
$people = array("Jack", "Jill");

Arr::insert_before_key($people, "Humpty", 1);
print_r($people);

// Result:
Array
(
	[0] => Jack
	[1] => Humpty
	[2] => Jill
)

insert_after_key(Array &$original, $value, $key, $is_assoc = false)

The insert_after_key method adds an element to an array after the key specified
WARNING: The original array is edited by reference, only boolean success is returned

Static Yes
Parameters
Param Default Description
$original required The array to use
$value required The value(s) to insert
$key required The key after which to insert
$is_assoc
false
Whether the array is assoc
Returns boolean
Example
$people = array("Jack", "Jill");

Arr::insert_after_key($people, "Humpty", 1);
print_r($people);

// Result:
Array
(
	[0] => Jack
	[1] => Jill
	[2] => Humpty
)

insert_after_value(Array &$original, $value, $search, $is_assoc = false)

The insert_after_value method adds an element to an array after the value specified
WARNING: The original array is edited by reference, only boolean success is returned

Static Yes
Parameters
Param Default Description
$original required The array to use
$value required The value(s) to insert
$search required The value after which to insert
$is_assoc
false
Whether the array is assoc
Returns boolean
Example
$people = array("Jack", "Jill");

Arr::insert_after_value($people, "Humpty", "Jack");
print_r($people);

// Result:
Array
(
	[0] => Jack
	[1] => Humpty
	[2] => Jill
)

sort($array, $key, $order = 'asc', $sort_flags = SORT_REGULAR)

The sort method sorts a multi-dimensional array by its values.

Static Yes
Parameters
Param Default Description
$array required The array to sort
$key required The key requested to sort by in $array.
$order
'asc'
The order (asc or desc).
$sort_flags
SORT_REGULAR
The php sort type flags (http://php.net/manual/en/function.sort.php)
Returns mixed
Example
$data = array(
	array(
		'info' => array(
			'pet' => array(
				'type' => 'dog'
			)
		),
	),
	array(
		'info' => array(
			'pet' => array(
				'type' => 'fish'
			)
		),
	),
	array(
		'info' => array(
			'pet' => array(
				'type' => 'cat'
			)
		),
	),
);

$data = Arr::sort($data, 'info.pet.type');
// Result:
array(
	array(
		'info' => array(
			'pet' => array(
				'type' => 'cat'
			)
		),
	),
	array(
		'info' => array(
			'pet' => array(
				'type' => 'dog'
			)
		),
	),
	array(
		'info' => array(
			'pet' => array(
				'type' => 'fish'
			)
		),
	),
);

multisort($array, $conditions, $ignore_case = false)

The sort method sorts a multi-dimensional array by multiple values.

Static Yes
Parameters
Param Default Description
$array required The array to sort
$conditions required Array of sorting conditions.
$ornire_case
false
Whether to sort case insensitive.
Returns array
Example
$collection = array(
	'i5' => array(
		'name' => 'Carl',
		'age' => 17,
		'points' => 30,
		'arr' => array(
			'key' => 10,
		),
	),
	'i7' => array(
		'name' => 'carl',
		'age' => 17,
		'points' => 20,
		'arr' => array(
			'key' => 10,
		),
	),
	'i2' => array(
		'name' => 'Bert',
		'age' => 20,
		'points' => 30,
		'arr' => array(
			'key' => 10,
		),
	),
);

$collection = \Arr::multisort($collection, array(
	'name' => SORT_ASC,
	'points' => array(SORT_ASC, SORT_NUMERIC),
	'age' => array(SORT_ASC, SORT_NUMERIC),
), true);
print_r($collection);

// Result
Array
(
	[i2] => Array
		(
			[name] => Bert
			[age] => 20
			[points] => 30
			[arr] => Array
				(
					[key] => 10
				)

		)

	[i7] => Array
		(
			[name] => carl
			[age] => 17
			[points] => 20
			[arr] => Array
				(
					[key] => 10
				)

		)

	[i5] => Array
		(
			[name] => Carl
			[age] => 17
			[points] => 30
			[arr] => Array
				(
					[key] => 10
				)

		)
)

in_array_recursive($needle, $haystack, $strict = false)

The in_array_recursive method checks whether a value is in an array recursively.

Static Yes
Parameters
Param Default Description
$needle required The value to search for
$haystack required The array to search in.
$strict
false
Whether to use == or ===.
Returns bool
Example
$arr = array('one' => 1, 2, 3, array(56), 87);

echo Arr::in_array_recursive('56', $arr);
// Result: true

echo Arr::in_array_recursive('87', $arr, true);
// Result: false

echo Arr::in_array_recursive(87, $arr, true);
// Result: true

merge($array)

The merge method merges 2 arrays recursively, differs in 2 important ways from array_merge_recursive():
- When there's 2 different values and not both arrays, the latter value overwrites the earlier instead of merging both into an array
- Numeric keys that don't conflict aren't changed, only when a numeric key already exists is the value added using array_push()

Static Yes
Parameters
Param Type Default Description
$array array required Multiple variables all of which must be arrays
Returns array
Throws InvalidArgumentException when one of the passed arguments is no array.
Example
$arr1 = array(
	'one' => 1,
	2,
	3,
	array(
		56
		),
	87
);

$arr2 = array(
	27,
	90,
	array(
		'give_me' => 'bandwidth'
		),
	'90',
	'php',
);

print_r( Arr::merge($arr1, $arr2) );
// Result:
Array
(
	[one] => 1
	[0] => 2
	[1] => 3
	[2] => Array (
			[0] => 56
				)
	[3] => 87
	[4] => 27
	[5] => 90
	[6] => Array (
			[give_me] => bandwidth
				)
	[7] => 90
	[8] => php
)

merge_assoc($array)

The merge_assoc method merges 2 or more arrays recursively, differs in 2 important ways from array_merge_recursive():
- When there's 2 different values and not both arrays, the latter value overwrites the earlier instead of merging both into an array
- Numeric keys aren't changed

Static Yes
Parameters
Param Type Default Description
$array array required Multiple variables all of which must be arrays
Returns array
Throws InvalidArgumentException when one of the passed arguments is no array.
Example
$arr1 = array(
	'one' => 1,
	2 => 2,
	3 => 3,
	4 => array(
		56
	),
	5=> 87
);

$arr2 = array(
	1 => 27,
	2 => 90,
	4 => array(
		'give_me' => 'bandwidth'
	),
	6 => '90',
	7 => 'php',
);

print_r( Arr::merge_assoc($arr1, $arr2) );
// Result:
Array
(
	[one] => 1
	[2] => 90
	[3] => 3
	[4] => Array (
		[0] => 56
		[give_me] => bandwidth
	)
	[5] => 87
	[1] => 27
	[6] => 90
	[7] => php
)

The search method searches the array for a given value and returns the corresponding key or default value.
- If $recursive is set to true, then the search method will return a delimiter-notated key using $delimiter.

Static Yes
Parameters
Param Type Default Description
$array array required The array to search
$value mixed required The searched value
$default string
null
The key to be returned if the requested value does not exist
$recursive boolean
true
Whether to get keys recursively
$delimiter string
'.'
The delimiter when $recursive is true
$strict bool
false
Do a strict comparison on key values
Returns int|string|null
Throws InvalidArgumentException when first argument is not array. InvalidArgumentException $default argument is not string or int or null. InvalidArgumentException $delimiter argument is not string.
Example
$arr = array(
	'one' => 1,
	'two' => 2,
	'three' => array(
		'a' => 4,
		'b' => 'foo'
	),
	'four',
	array(
			null,
			array(
				null,
				null,
				null,
				array(
					'deep'
				)
			)
		),
);

echo Arr::search($arr, 1);
// one

echo Arr::search($arr, 'four');
// 0

var_dump(Arr::search($arr, 5));
// NULL

echo Arr::search($arr, 4, null, true);
// three.a

var_dump(Arr::search($arr, '4', null, true, '.', true));
// NULL

echo Arr::search($arr, 'deep', null, true);
// 1.1.3.0

unique($array)

The unique returns an array with all unique values in the source array. The first value matched will be kept, duplicates will be discarded. Keys will be preserved. This method works like array_unique(), but doesn't sort the array first, and allows you to dedup arrays that contain objects or closures.

Parameters
Param Type Default Description
$array array required the array to de-duplicate
Returns array
Example
$array = array(
	'val1' => 'hello', 'val2' => 'hello', 'val3' => 'bye',
);

// Result: array('val1' => 'hello', 'val3' => 'bye')
$result = Arr::unique($array);

sum($array, $key)

The sum method calculate the sum of values in an array plucked by the $key.

Static Yes
Parameters
Param Type Default Description
$array array required the array containing the values
$key string required The key to pluck from the arrays
Returns int
Throws InvalidArgumentException when one of the passed arguments is no array.
Example
$collection = array(
	array(
		'age' => 20,
		'name' => 'Bill',
		'scores' => array(
			'math' => 10,
		),
	),
	array(
		'age' => 25,
		'name' => 'Chris',
		'scores' => array(
			'math' => 15,
		),
	),
	array(
		'age' => 38,
		'name' => 'Bert',
		'scores' => array(
			'math' => 5,
		),
	),
);

// Calculate sum of an array of age's
$total_age = Arr::sum($collection, 'age'); // 83

// Calculate sum of an array plucked by 'scores.math'
$total_score = Arr::sum($collection, 'scores.math'); // 30

reindex($array)

The reindex method recusively re-indexes the numeric keys of an array. It will not alter string keys.

Static Yes
Parameters
Param Type Default Description
$array array required the array to re-index
Returns array
Example
$array = array(
	2 => 2,
	'three' => 3,
	5 => array(
		2 => 2,
		'three' => 3,
		5 => 5
	),
	7 => 7
);

// reindex the array
print_r( Arr::reindex($array) );
// Result:
Array
(
	[0] => 2
	[three] => 3
	[1] => Array
		(
			[0] => 2
			[three] => 3
			[1] => 5
		)

	[2] => 7
)

previous_by_key($array, $key, $get_value = false, $strict = false)

The previous_by_key method allows you to fetch the key or the value of the previous element of an array, given an existing key value.

Static Yes
Parameters
Param Default Description
$array required The array to use
$key required The current key value to use as lookup reference
$get_value
false
If false, return the previous array key, if true, return its value
$strict
false
Do a strict comparison on key values
Returns mixed, the returned value, null if there is no previous array element, or false if the current key does not exist.
Example
// array to lookup in
$arr = array(2 => 'A', 4 => '2', 6 => 'C');

// returns false, there is no key 1 in the array
$result = Arr::previous_by_key($arr, 1);

// returns null, there is no previous key
$result = Arr::previous_by_key($arr, 2);

// returns false, there is no key '2' in the array
$result = Arr::previous_by_key($arr, '2', false, true);

// returns 2, it's the key in the array before key 4
$result = Arr::previous_by_key($arr, 4);

// returns 'A', it's the value the previous key in the array points to
$result = Arr::previous_by_key($arr, 4, true);

next_by_key($array, $key, $get_value = false, $strict = false)

The next_by_key method allows you to fetch the key or the value of the next element of an array, given an existing key value.

Static Yes
Parameters
Param Default Description
$array required The array to use
$key required The current key value to use as lookup reference
$get_value
false
If false, return the next array key, if true, return its value
$strict
false
Do a strict comparison on key values
Returns mixed, the returned value, null if there is no next array element, or false if the current key does not exist.
Example
// array to lookup in
$arr = array(2 => 'A', 4 => '2', 6 => 'C');

// returns false, there is no key 1 in the array
$result = Arr::next_by_key($arr, 1);

// returns null, there is no next key
$result = Arr::next_by_key($arr, 6);

// returns false, there is no key '2' in the array
$result = Arr::next_by_key($arr, '2', false, true);

// returns 6, it's the key in the array after key 4
$result = Arr::next_by_key($arr, 4);

// returns 'C', it's the value the next key in the array points to
$result = Arr::next_by_key($arr, 4, true);

previous_by_value($array, $value, $get_value = true, $strict = false)

The previous_by_value method allows you to fetch the key or the value of the previous element of an array, given an existing element value.

Static Yes
Parameters
Param Default Description
$array required The array to use
$value required The current element value to use as lookup reference
$get_value
true
If false, return the previous array key, if true, return its value
$strict
false
Do a strict comparison on element values
Returns mixed, the returned value, null if there is no previous array element, or false if the current value could not be found.
Example
// array to lookup in
$arr = array(2 => 'A', 4 => '2', 6 => 'C');

// returns false, there is no value 'Z' in the array
$result = Arr::previous_by_value($arr, 'Z');

// returns null, there is no previous value
$result = Arr::previous_by_value($arr, 'A');

// returns false, there is no value 2 in the array, only '2'
$result = Arr::previous_by_value($arr, 2, false, true);

// returns 'A', it's the value the previous key in the array points to
$result = Arr::previous_by_value($arr, '2');

// returns 2, it's the key of the previous array element
$result = Arr::previous_by_value($arr, '2', false);

next_by_value($array, $value, $get_value = true, $strict = false)

The next_by_value method allows you to fetch the key or the value of the next element of an array, given an existing element value.

Static Yes
Parameters
Param Default Description
$array required The array to use
$value required The current element value to use as lookup reference
$get_value
true
If false, return the next array key, if true, return its value
$strict
false
Do a strict comparison on element values
Returns mixed, the returned value, null if there is no next array element, or false if the current value could not be found.
Example
// array to lookup in
$arr = array(2 => 'A', 4 => '2', 6 => 'C');

// returns false, there is no value 'Z' in the array
$result = Arr::next_by_value($arr, 'Z');

// returns null, there is no next value
$result = Arr::next_by_value($arr, 'C');

// returns false, there is no value 2 in the array, only '2'
$result = Arr::next_by_value($arr, 2, false, true);

// returns 'C', it's the value the next key in the array points to
$result = Arr::next_by_value($arr, '2');

// returns 6, it's the key of the next array element
$result = Arr::next_by_value($arr, '2', false);

Note that the 'by_key' and 'by_value' methods use the return values null and false to signal error conditions. Therefore the array passed may not contain keys or values that are null or false.

Procedural helpers

in_arrayi($needle, $haystack)

The in_arrayi function is a case-insensitive version of in_array.

Parameters
Param Type Default Description
$needle string required the value to search for
$haystack array required the array to search in
Returns bool
Example
echo in_arrayi('This', array('something','tHis'));
// Result: true

echo in_arrayi('Thi', array('something','tHis'));
// Result: false