Helper carr
The carr helper class provides array utility methods with dot notation support.
carr::accessible
The carr::accessible method determines if the given value is array accessible:
$isAccessible = carr::accessible(['a' => 1, 'b' => 2]);
// true
$isAccessible = carr::accessible(new CCollection);
// true
$isAccessible = carr::accessible('abc');
// false
$isAccessible = carr::accessible(new stdClass);
carr::get
The carr::get method retrieves a value from a deeply nested array using dot notation:
$array = ['products' => ['desk' => ['price' => 100]]];
$price = carr::get($array, 'products.desk.price');
The carr::get method also accepts a default value as the third argument, which is returned if the key is not found:
$discount = carr::get($array, 'products.desk.discount', 0);
// 0
carr::add
The carr::add method adds a key/value pair to the array if the key doesn't exist or is null:
$array = carr::add(['name' => 'Desk'], 'price', 100);
// ['name' => 'Desk', 'price' => 100]
$array = carr::add(['name' => 'Desk', 'price' => null], 'price', 100);
// ['name' => 'Desk', 'price' => 100]
carr::collapse
The carr::collapse method collapses an array of arrays into a single flat array:
$array = carr::collapse([[1, 2, 3], [4, 5, 6], [7, 8, 9]]);
// [1, 2, 3, 4, 5, 6, 7, 8, 9]
carr::crossJoin
The carr::crossJoin method cross joins the given arrays, returning a Cartesian product with all possible permutations:
$matrix = carr::crossJoin([1, 2], ['a', 'b']);
/*
[
[1, 'a'],
[1, 'b'],
[2, 'a'],
[2, 'b'],
]
*/
$matrix = carr::crossJoin([1, 2], ['a', 'b'], ['I', 'II']);
/*
[
[1, 'a', 'I'],
[1, 'a', 'II'],
[1, 'b', 'I'],
[1, 'b', 'II'],
[2, 'a', 'I'],
[2, 'a', 'II'],
[2, 'b', 'I'],
[2, 'b', 'II'],
]
*/
carr::divide
The carr::divide method returns two arrays: one containing the keys and the other containing the values of the given array:
[$keys, $values] = carr::divide(['name' => 'Desk']);
// $keys: ['name']
// $values: ['Desk']
/**
* Use below statement when on the php 5.xx
*/
list($keys, $values) = carr::divide(['name' => 'Desk']);
carr::dot
The carr::dot method flattens a multi-dimensional array into a single-level array using dot notation to indicate depth:
$array = ['products' => ['desk' => ['price' => 100]]];
$flattened = carr::dot($array);
// ['products.desk.price' => 100]
carr::except
The carr::except method removes the given key/value pairs from an array:
$array = ['name' => 'Desk', 'price' => 100];
$filtered = carr::except($array, ['price']);
// ['name' => 'Desk']
carr::exists
The carr::exists method checks if the given key exists in the provided array:
$array = ['name' => 'John Doe', 'age' => 17];
$exists = carr::exists($array, 'name');
// true
$exists = carr::exists($array, 'salary');
// false
carr::first
The Arr::first method returns the first element of an array passing a given truth test:
$array = [100, 200, 300];
$first = carr::first($array, function ($value, $key) {
return $value >= 150;
});
// 200
A default value may also be passed as the third parameter to the method. This value will be returned if no value passes the truth test:
$first = carr::first($array, $callback, $default);
carr::flatten
The carr::flatten method flattens a multi-dimensional array into a single level array:
$array = ['name' => 'Joe', 'languages' => ['PHP', 'Ruby']];
$flattened = carr::flatten($array);
// ['Joe', 'PHP', 'Ruby']
carr::forget
The carr::forget method removes a given key / value pair from a deeply nested array using "dot" notation:
$array = ['products' => ['desk' => ['price' => 100]]];
carr::forget($array, 'products.desk');
// ['products' => []]
carr::has
The carr::has method checks whether a given item or items exists in an array using "dot" notation:
$array = ['product' => ['name' => 'Desk', 'price' => 100]];
$contains = carr::has($array, 'product.name');
// true
$contains = carr::has($array, ['product.price', 'product.discount']);
// false
carr::hasAny
The carr::hasAny method checks whether any item in a given set exists in an array using "dot" notation:
$array = ['product' => ['name' => 'Desk', 'price' => 100]];
$contains = carr::hasAny($array, 'product.name');
// true
$contains = carr::hasAny($array, ['product.name', 'product.discount']);
// true
$contains = carr::hasAny($array, ['category', 'product.discount']);
// false
carr::isAssoc
The carr::isAssoc method returns true if the given array is an associative array. An array is considered "associative" if it doesn't have sequential numerical keys beginning with zero:
$isAssoc = carr::isAssoc(['product' => ['name' => 'Desk', 'price' => 100]]);
// true
$isAssoc = carr::isAssoc([1, 2, 3]);
// false
carr::isList
The carr::isList method returns true if the given array's keys are sequential integers beginning from zero:
$isList = Arr::isList(['foo', 'bar', 'baz']);
// true
$isList = Arr::isList(['product' => ['name' => 'Desk', 'price' => 100]]);
// false
carr::join
The carr::join method joins array elements with a string. Using this method's second argument, you may also specify the joining string for the final element of the array:
$array = ['Tailwind', 'Alpine', 'Laravel', 'Livewire'];
$joined = carr::join($array, ', ');
// Tailwind, Alpine, Laravel, Livewire
$joined = carr::join($array, ', ', ' and ');
// Tailwind, Alpine, Laravel and Livewire
carr::keyBy
The carr::keyBy method keys the array by the given key. If multiple items have the same key, only the last one will appear in the new array:
$array = [
['product_id' => 'prod-100', 'name' => 'Desk'],
['product_id' => 'prod-200', 'name' => 'Chair'],
];
$keyed = carr::keyBy($array, 'product_id');
/*
[
'prod-100' => ['product_id' => 'prod-100', 'name' => 'Desk'],
'prod-200' => ['product_id' => 'prod-200', 'name' => 'Chair'],
]
*/
carr::last
The carr::last method returns the last element of an array passing a given truth test:
$array = [100, 200, 300, 110];
$last = carr::last($array, function ($value, $key) {
return $value >= 150;
});
// 300
A default value may be passed as the third argument to the method. This value will be returned if no value passes the truth test:
$last = carr::last($array, $callback, $default);
carr::map
The carr::map method iterates through the array and passes each value and key to the given callback. The array value is replaced by the value returned by the callback:
$array = ['first' => 'james', 'last' => 'kirk'];
$mapped = carr::map($array, function ($value, $key) {
return ucfirst($value);
});
// ['first' => 'James', 'last' => 'Kirk']
carr::only
The carr::only method returns only the specified key / value pairs from the given array:
$array = ['name' => 'Desk', 'price' => 100, 'orders' => 10];
$slice = carr::only($array, ['name', 'price']);
// ['name' => 'Desk', 'price' => 100]
carr::pluck
The carr::pluck method retrieves all of the values for a given key from an array:
$array = [
['product' => ['id' => 1, 'name' => 'Desk']],
['product' => ['id' => 2, 'name' => 'Chair']],
];
$names = carr::pluck($array, 'product.name');
// ['Desk', 'Chair']
You may also specify how you wish the resulting list to be keyed:
$names = carr::pluck($array, 'product.name', 'product.id');
// [1 => 'Desk', 2 => 'Chair']
carr::prepend
The carr::prepend method will push an item onto the beginning of an array:
$array = ['one', 'two', 'three', 'four'];
$array = carr::prepend($array, 'zero');
// ['zero', 'one', 'two', 'three', 'four']
If needed, you may specify the key that should be used for the value:
$array = ['price' => 100];
$array = carr::prepend($array, 'Desk', 'name');
// ['name' => 'Desk', 'price' => 100]
carr::prependKeysWith
The carr::prependKeysWith prepends all key names of an associative array with the given prefix:
$array = [
'name' => 'Desk',
'price' => 100,
];
$keyed = Arr::prependKeysWith($array, 'product.');
/*
[
'product.name' => 'Desk',
'product.price' => 100,
]
*/
carr::pull
The carr::pull method returns and removes a key / value pair from an array:
$array = ['name' => 'Desk', 'price' => 100];
$name = carr::pull($array, 'name');
// $name: Desk
// $array: ['price' => 100]
A default value may be passed as the third argument to the method. This value will be returned if the key doesn't exist:
$value = carr::pull($array, $key, $default);
carr::query
The carr::query method converts the array into a query string:
$array = [
'name' => 'Desk',
'order' => [
'column' => 'created_at',
'direction' => 'desc'
]
];
carr::query($array);
// name=Desk&order[column]=created_at&order[direction]=desc
carr::random
The carr::random method returns a random value from an array:
$array = [1, 2, 3, 4, 5];
$random = carr::random($array);
// 4 - (retrieved randomly)
You may also specify the number of items to return as an optional second argument. Note that providing this argument will return an array even if only one item is desired:
$items = carr::random($array, 2);
// [2, 5] - (retrieved randomly)
carr::set
The carr::set method sets a value within a deeply nested array using "dot" notation:
$array = ['products' => ['desk' => ['price' => 100]]];
carr::set($array, 'products.desk.price', 200);
// ['products' => ['desk' => ['price' => 200]]]
carr::shuffle
The carr::shuffle method randomly shuffles the items in the array:
$array = carr::shuffle([1, 2, 3, 4, 5]);
// [3, 2, 5, 1, 4] - (generated randomly)
carr::sort
The carr::sort method sorts an array by its values:
$array = ['Desk', 'Table', 'Chair'];
$sorted = carr::sort($array);
// ['Chair', 'Desk', 'Table']
You may also sort the array by the results of a given closure:
$array = [
['name' => 'Desk'],
['name' => 'Table'],
['name' => 'Chair'],
];
$sorted = array_values(carr::sort($array, function ($value) {
return $value['name'];
}));
/*
[
['name' => 'Chair'],
['name' => 'Desk'],
['name' => 'Table'],
]
*/
carr::sortRecursive
The carr::sortRecursive method recursively sorts an array using the sort function for numerically indexed sub-arrays and the ksort function for associative sub-arrays:
$array = [
['Roman', 'Taylor', 'Li'],
['PHP', 'Ruby', 'JavaScript'],
['one' => 1, 'two' => 2, 'three' => 3],
];
$sorted = carr::sortRecursive($array);
/*
[
['JavaScript', 'PHP', 'Ruby'],
['one' => 1, 'three' => 3, 'two' => 2],
['Li', 'Roman', 'Taylor'],
]
*/
carr::toCssClasses
The carr::toCssClasses conditionally compiles a CSS class string. The method accepts an array of classes where the array key contains the class or classes you wish to add, while the value is a boolean expression. If the array element has a numeric key, it will always be included in the rendered class list:
$isActive = false;
$hasError = true;
$array = ['p-4', 'font-bold' => $isActive, 'bg-red' => $hasError];
$classes = carr::toCssClasses($array);
/*
'p-4 bg-red'
*/
carr::undot()
The carr::undot method expands a single-dimensional array that uses "dot" notation into a multi-dimensional array:
$array = [
'product.type' => 'Desk',
'product.location' => 'Bed Room',
];
$array = carr::undot($array);
// ['product' => ['type' => 'Desk', 'location' => 'Bed Room']]
carr::where
The carr::where method filters an array using the given closure:
$array = [100, '200', 300, '400', 500];
$filtered = carr::where($array, function ($value, $key) {
return is_string($value);
});
// [1 => '200', 3 => '400']
carr::whereNotNull
The carr::whereNotNull method removes all null values from the given array:
$array = [0, null];
$filtered = carr::whereNotNull($array);
// [0 => 0]
carr::wrap
The carr::wrap method wraps the given value in an array. If the given value is already an array it will be returned without modification:
$string = 'Cresenity';
$array = carr::wrap($string);
// ['Cresenity']
If the given value is null, an empty array will be returned:
$array = carr::wrap(null);
// []