This package provides useful helpers for working with arrays in PHP.
Based on ...
- Laravel's array helper work (https://github.com/laravel/framework)
You can install this package via composer:
composer require chr15k/array
- accessible
- add
- collapse
- crossJoin
- divide
- dot
- except
- exists
- first
- flatten
- forget
- get
- has
- hasAny
- isAssoc
- isMultiDimensional
- last
- only
- pluck
- prepend
- pull
- query
- random
- set
- shuffle
- sort
- sortRecursive
- where
- wrap
The Arr::accessible method checks that the given value is array accessible:
<?php
use Chr15k\Arr\Arr;
$isAccessible = Arr::accessible(['a' => 1, 'b' => 2]);
// true
$isAccessible = Arr::accessible('abc');
// false
$isAccessible = Arr::accessible(new stdClass);
// false
The Arr::add method adds a given key / value pair to an array if the given key doesn't already exist in the array or is set to null:
<?php
use Chr15k\Arr\Arr;
$array = Arr::add(['name' => 'Desk'], 'price', 100);
// ['name' => 'Desk', 'price' => 100]
$array = Arr::add(['name' => 'Desk', 'price' => null], 'price', 100);
// ['name' => 'Desk', 'price' => 100]
The Arr::collapse method collapses an array of arrays into a single array:
<?php
use Chr15k\Arr\Arr;
$array = Arr::collapse([[1, 2, 3], [4, 5, 6], [7, 8, 9]]);
// [1, 2, 3, 4, 5, 6, 7, 8, 9]
The Arr::crossJoin method cross joins the given arrays, returning a Cartesian product with all possible permutations:
<?php
use Chr15k\Arr\Arr;
$matrix = Arr::crossJoin([1, 2], ['a', 'b']);
/*
[
[1, 'a'],
[1, 'b'],
[2, 'a'],
[2, 'b'],
]
*/
$matrix = Arr::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'],
]
*/
The Arr::divide method returns two arrays, one containing the keys, and the other containing the values of the given array:
<?php
use Chr15k\Arr\Arr;
[$keys, $values] = Arr::divide(['name' => 'Desk']);
// $keys: ['name']
// $values: ['Desk']
The Arr::dot method flattens a multi-dimensional array into a single level array that uses "dot" notation to indicate depth:
<?php
use Chr15k\Arr\Arr;
$array = ['products' => ['desk' => ['price' => 100]]];
$flattened = Arr::dot($array);
// ['products.desk.price' => 100]
The Arr::except method removes the given key / value pairs from an array:
<?php
use Chr15k\Arr\Arr;
$array = ['name' => 'Desk', 'price' => 100];
$filtered = Arr::except($array, ['price']);
// ['name' => 'Desk']
The Arr::exists method checks that the given key exists in the provided array:
<?php
use Chr15k\Arr\Arr;
$array = ['name' => 'John Doe', 'age' => 17];
$exists = Arr::exists($array, 'name');
// true
$exists = Arr::exists($array, 'salary');
// false
The Arr::first method returns the first element of an array passing a given truth test:
<?php
use Chr15k\Arr\Arr;
$array = [100, 200, 300];
$first = Arr::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 = Arr::first($array, $callback, $default);
The Arr::flatten method flattens a multi-dimensional array into a single level array:
<?php
use Chr15k\Arr\Arr;
$array = ['name' => 'Joe', 'languages' => ['PHP', 'Ruby']];
$flattened = Arr::flatten($array);
// ['Joe', 'PHP', 'Ruby']
The Arr::forget method removes a given key / value pair from a deeply nested array using "dot" notation:
<?php
use Chr15k\Arr\Arr;
$array = ['products' => ['desk' => ['price' => 100]]];
Arr::forget($array, 'products.desk');
// ['products' => []]
The Arr::get method retrieves a value from a deeply nested array using "dot" notation:
<?php
use Chr15k\Arr\Arr;
$array = ['products' => ['desk' => ['price' => 100]]];
$price = Arr::get($array, 'products.desk.price');
// 100
// The Arr::get method also accepts a default value, which will be returned if the specific key is not found:
$discount = Arr::get($array, 'products.desk.discount', 0);
// 0
The Arr::has method checks whether a given item or items exists in an array using "dot" notation:
<?php
use Chr15k\Arr\Arr;
$array = ['product' => ['name' => 'Desk', 'price' => 100]];
$contains = Arr::has($array, 'product.name');
// true
$contains = Arr::has($array, ['product.price', 'product.discount']);
// false
The Arr::hasAny method checks whether any item in a given set exists in an array using "dot" notation:
<?php
use Chr15k\Arr\Arr;
$array = ['product' => ['name' => 'Desk', 'price' => 100]];
$contains = Arr::hasAny($array, 'product.name');
// true
$contains = Arr::hasAny($array, ['product.name', 'product.discount']);
// true
$contains = Arr::hasAny($array, ['category', 'product.discount']);
// false
The Arr::isAssoc 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:
<?php
use Chr15k\Arr\Arr;
$isAssoc = Arr::isAssoc(['product' => ['name' => 'Desk', 'price' => 100]]);
// true
$isAssoc = Arr::isAssoc([1, 2, 3]);
// false
The Arr::isMultiDimensional method returns true if the given array is multi-dimensional
<?php
use Chr15k\Arr\Arr;
$isMultiDimensional = Arr::isMultiDimensional(['product' => ['name' => 'Desk', 'price' => 100]]);
// true
$isMultiDimensional = Arr::isMultiDimensional([2, 3, [4]]);
// true
$isMultiDimensional = Arr::isMultiDimensional([2, 3, 4]);
// false
$isMultiDimensional = Arr::isMultiDimensional(['name' => 'Desk', 'price' => 100]);
// false
// Accounts for empty arrays
$isMultiDimensional = Arr::isMultiDimensional(['name' => 'Desk', 'price' => 100, []]);
// true
The Arr::last method returns the last element of an array passing a given truth test:
<?php
use Chr15k\Arr\Arr;
$array = [100, 200, 300, 110];
$last = Arr::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 = Arr::last($array, $callback, $default);
The Arr::only method returns only the specified key / value pairs from the given array:
<?php
use Chr15k\Arr\Arr;
$array = ['name' => 'Desk', 'price' => 100, 'orders' => 10];
$slice = Arr::only($array, ['name', 'price']);
// ['name' => 'Desk', 'price' => 100]
The Arr::pluck method retrieves all of the values for a given key from an array:
<?php
use Chr15k\Arr\Arr;
$array = [
['developer' => ['id' => 1, 'name' => 'Taylor']],
['developer' => ['id' => 2, 'name' => 'Abigail']],
];
$names = Arr::pluck($array, 'developer.name');
// ['Taylor', 'Abigail']
// You may also specify how you wish the resulting list to be keyed:
$names = Arr::pluck($array, 'developer.name', 'developer.id');
// [1 => 'Taylor', 2 => 'Abigail']
The Arr::prepend method will push an item onto the beginning of an array:
<?php
use Chr15k\Arr\Arr;
$array = ['one', 'two', 'three', 'four'];
$array = Arr::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 = Arr::prepend($array, 'Desk', 'name');
// ['name' => 'Desk', 'price' => 100]
The Arr::pull method returns and removes a key / value pair from an array:
<?php
use Chr15k\Arr\Arr;
$array = ['name' => 'Desk', 'price' => 100];
$name = Arr::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 = Arr::pull($array, $key, $default);
The Arr::query method converts the array into a query string:
<?php
use Chr15k\Arr\Arr;
$array = ['name' => 'Taylor', 'order' => ['column' => 'created_at', 'direction' => 'desc']];
Arr::query($array);
// name=Taylor&order[column]=created_at&order[direction]=desc
The Arr::random method returns a random value from an array:
<?php
use Chr15k\Arr\Arr;
$array = [1, 2, 3, 4, 5];
$random = Arr::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 = Arr::random($array, 2);
// [2, 5] - (retrieved randomly)
The Arr::set method sets a value within a deeply nested array using "dot" notation:
<?php
use Chr15k\Arr\Arr;
$array = ['products' => ['desk' => ['price' => 100]]];
Arr::set($array, 'products.desk.price', 200);
// ['products' => ['desk' => ['price' => 200]]]
The Arr::shuffle method randomly shuffles the items in the array:
<?php
use Chr15k\Arr\Arr;
$array = Arr::shuffle([1, 2, 3, 4, 5]);
// [3, 2, 5, 1, 4] - (generated randomly)
The Arr::sort method sorts an array by its values.
<?php
use Chr15k\Arr\Arr;
$array = ['Desk', 'Table', 'Chair'];
$sorted = Arr::sort($array);
// ['Chair', 'Desk', 'Table']
// Reverse the order by passing true to the second argument
$sorted = Arr::sort($array, true);
// ['Table', 'Desk', 'Chair']
The Arr::sortRecursive method recursively sorts an array using the sort function for numeric sub=arrays and ksort for associative subarrays:
<?php
use Chr15k\Arr\Arr;
$array = [
['Roman', 'Taylor', 'Li'],
['PHP', 'Ruby', 'JavaScript'],
['one' => 1, 'two' => 2, 'three' => 3],
];
$sorted = Arr::sortRecursive($array);
/*
[
['JavaScript', 'PHP', 'Ruby'],
['one' => 1, 'three' => 3, 'two' => 2],
['Li', 'Roman', 'Taylor'],
]
*/
The Arr::where method filters an array using the given Closure:
<?php
use Chr15k\Arr\Arr;
$array = [100, '200', 300, '400', 500];
$filtered = Arr::where($array, function ($value, $key) {
return is_string($value);
});
// [1 => '200', 3 => '400']
The Arr::wrap method wraps the given value in an array. If the given value is already an array it will not be changed:
<?php
use Chr15k\Arr\Arr;
$string = 'Laravel';
$array = Arr::wrap($string);
// ['Laravel']
// If the given value is null, an empty array will be returned:
$nothing = null;
$array = Arr::wrap($nothing);
// []
You can run the tests with:
vendor/bin/phpunit
The MIT License (MIT). Please see License File for more information.