New Arr Class
We are trying to use \Windwalker\Utilities\Arr replace old ArrayHelper.
Simple Usage
Get and set:
$bar = Arr::get($arrayOrObject, 'foo.bar', 'default');
Arr::set($arrayOrObject, 'foo.baz', 'value');
Arr::has($arrayOrObject, 'foo.baz');
Arr::remove($arrayOrObject, 'foo.baz');
Method list of Arr
Arr::toArray($data, $recursive = false)
Arr::toObject(array $array, $class = 'stdClass')
Arr::has($array, $key, $delimiter = '.')
Arr::def($array, $key, $value, $delimiter = '.')
Arr::get($data, $key, $default = null, $delimiter = '.')
Arr::set($data, $key, $value, $delimiter = '.', $storeType = 'array')
Arr::remove($data, $key, $delimiter = '.')
Arr::collapse($data)
Arr::flatten($array, $delimiter = '.', $depth = 0, $prefix = null)
Arr::only($data, array $fields)
Arr::find(array $data, callable $callback = null, $keepKey = false, $offset = null, $limit = null)
Arr::findFirst(array $data, callable $callback = null)
Arr::reject(array $data, callable $callback, $keepKey = false)
Arr::takeout(&$data, $key, $default = null, $delimiter = '.')
Arr::sort(array $data, $condition, $descending = false, $options = SORT_REGULAR)
Arr::invert(array $array)
Arr::pivot(array $array)
Arr::isAssociative(array $array)
Arr::accessible($array)
Arr::group(array $array, $key = null, $forceArray = false)
Arr::unique(array $array)
Arr::mergeRecursive($array1)
Arr::dump($data, $depth = 5)
Arr::show($arg)
Arr::map(array $array, callable $callback, $recursive = false)
Using ArrayHelper
toObject
use Windwalker\Utilities\ArrayHelper;
class Book {
    public $name;
    public $author;
    public $genre;
    public $rating;
}
class Author {
    public $name;
    public $born;
}
$input = array(
    "name" => "The Hitchhiker's Guide to the Galaxy",
    "author" => array(
        "name" => "Douglas Adams",
        "born" => 1952,
        "died" => 2001),
    "genre" => "comic science fiction",
    "rating" => 10
);
$book = ArrayHelper::toObject($input, 'Book');
var_dump($book);
Result:
class Book#1 (4) {
  public $name =>
  string(36) "The Hitchhiker's Guide to the Galaxy"
  public $author =>
  class Book#2 (6) {
    public $name =>
    string(13) "Douglas Adams"
    public $author =>
    NULL
    public $genre =>
    NULL
    public $rating =>
    NULL
    public $born =>
    int(1952)
    public $died =>
    int(2001)
  }
  public $genre =>
  string(21) "comic science fiction"
  public $rating =>
  int(10)
}
getColumn
use Windwalker\Utilities\ArrayHelper;
$rows = array(
    array("name" => "John", "age" => 20),
    array("name" => "Alex", "age" => 35),
    array("name" => "Sarah", "age" => 27)
);
$names = ArrayHelper::getColumn($rows, 'name');
var_dump($names);
Result:
array(3) {
  [0] =>
  string(4) "John"
  [1] =>
  string(4) "Alex"
  [2] =>
  string(5) "Sarah"
}
getValue
use Windwalker\Utilities\ArrayHelper;
$city = array(
    "name" => "Oslo",
    "country" => "Norway"
);
// Prints 'Oslo'
echo ArrayHelper::getValue($city, 'name');
// Prints 'unknown mayor' (no 'mayor' key is found in the array)
echo ArrayHelper::getValue($city, 'mayor', 'unknown mayor');
invert
use Windwalker\Utilities\ArrayHelper;
$input = array(
    'New' => array('1000', '1500', '1750'),
    'Used' => array('3000', '4000', '5000', '6000')
);
$output = ArrayHelper::invert($input);
var_dump($output);
Result:
array(7) {
  [1000] =>
  string(3) "New"
  [1500] =>
  string(3) "New"
  [1750] =>
  string(3) "New"
  [3000] =>
  string(4) "Used"
  [4000] =>
  string(4) "Used"
  [5000] =>
  string(4) "Used"
  [6000] =>
  string(4) "Used"
}
isAssociative
use Windwalker\Utilities\ArrayHelper;
$user = array("id" => 46, "name" => "John");
echo ArrayHelper::isAssociative($user) ? 'true' : 'false'; // true
$letters = array("a", "b", "c");
echo ArrayHelper::isAssociative($letters) ? 'true' : 'false'; // false
group
use Windwalker\Utilities\ArrayHelper;
$movies = array(
    array('year' => 1972, 'title' => 'The Godfather'),
    array('year' => 2000, 'title' => 'Gladiator'),
    array('year' => 2000, 'title' => 'Memento'),
    array('year' => 1964, 'title' => 'Dr. Strangelove')
);
$pivoted = ArrayHelper::pivot($movies, 'year');
var_dump($pivoted);
Result:
array(3) {
  [1972] =>
  array(2) {
    'year' =>
    int(1972)
    'title' =>
    string(13) "The Godfather"
  }
  [2000] =>
  array(2) {
    [0] =>
    array(2) {
      'year' =>
      int(2000)
      'title' =>
      string(9) "Gladiator"
    }
    [1] =>
    array(2) {
      'year' =>
      int(2000)
      'title' =>
      string(7) "Memento"
    }
  }
  [1964] =>
  array(2) {
    'year' =>
    int(1964)
    'title' =>
    string(15) "Dr. Strangelove"
  }
}
sortObjects
use Windwalker\Utilities\ArrayHelper;
$members = array(
    (object) array('first_name' => 'Carl', 'last_name' => 'Hopkins'),
    (object) array('first_name' => 'Lisa', 'last_name' => 'Smith'),
    (object) array('first_name' => 'Julia', 'last_name' => 'Adams')
);
$sorted = ArrayHelper::sortObjects($members, 'last_name', 1);
var_dump($sorted);
Result:
array(3) {
  [0] =>
  class stdClass#3 (2) {
    public $first_name =>
    string(5) "Julia"
    public $last_name =>
    string(5) "Adams"
  }
  [1] =>
  class stdClass#1 (2) {
    public $first_name =>
    string(4) "Carl"
    public $last_name =>
    string(7) "Hopkins"
  }
  [2] =>
  class stdClass#2 (2) {
    public $first_name =>
    string(4) "Lisa"
    public $last_name =>
    string(5) "Smith"
  }
}
arrayUnique
use Windwalker\Utilities\ArrayHelper;
$names = array(
    array("first_name" => "John", "last_name" => "Adams"),
    array("first_name" => "John", "last_name" => "Adams"),
    array("first_name" => "John", "last_name" => "Smith"),
    array("first_name" => "Sam", "last_name" => "Smith")
);
$unique = ArrayHelper::arrayUnique($names);
var_dump($unique);
Result:
array(3) {
  [0] =>
  array(2) {
    'first_name' =>
    string(4) "John"
    'last_name' =>
    string(5) "Adams"
  }
  [2] =>
  array(2) {
    'first_name' =>
    string(4) "John"
    'last_name' =>
    string(5) "Smith"
  }
  [3] =>
  array(2) {
    'first_name' =>
    string(3) "Sam"
    'last_name' =>
    string(5) "Smith"
  }
}
flatten
use Windwalker\Utilities\ArrayHelper;
$array = array(
    'flower' => array(
        'sakura' => 'samurai',
        'olive' => 'peace'
    )
);
// Make nested data flatten and separate by dot (".")
$flatted1 = ArrayHelper::flatten($array);
echo $flatted1['flower.sakura']; // 'samuari'
// Custom separator
$flatted2 = ArrayHelper::flatten($array, '/');
echo $flatted2['flower/olive']; // 'peace'
merge
Recursive merge two array.
use Windwalker\Utilities\ArrayHelper;
$array2 = array(
    'flower' => array(
        'sakura' => 'samurai',
        'olive' => 'peace'
    )
);
$array2 = array(
    'flower' => array(
        'sakura' => 'overrided',
    )
);
$newArray = ArrayHelper:merge($array1, $array2, true);
Array
(
    [flower] => Array
    (
        [sakura] => overrided
        [olive] => peace
    )
)
match
Check an array matched our query condition.
$array = array(
    'id' => 1,
    'title' => 'Julius Caesar',
    'data' => (object) array('foo' => 'bar'),
);
// Check id=1
$bool = ArrayHelper::match($data, array('id' => 1));
// Check id=1 with strict compare (int)
$bool = ArrayHelper::match($data, array('id' => 1), true);
// Check id=1 AND title='Julius Caesar'
$bool = ArrayHelper::match($data, array('id' => 1, 'title' => 'Julius Caesar'));
// Check id IN (2,3,4)
$bool = ArrayHelper::match($data, array('id' => array(2, 3, 4)));
// Check id >= 2
$bool = ArrayHelper::match($data, array('id >=' => 2));
query
Find element matched array in array.
$data = array(
    array(
        'id' => 1,
        'title' => 'Julius Caesar',
        'data' => (object) array('foo' => 'bar'),
    ),
    array(
        'id' => 2,
        'title' => 'Macbeth',
        'data' => array(),
    ),
    array(
        'id' => 3,
        'title' => 'Othello',
        'data' => 123,
    ),
    array(
        'id' => 4,
        'title' => 'Hamlet',
        'data' => true,
    ),
);
// Query id=2
$newArray = ArrayHelper::query($data, array('id' => 2));
// Query id=2, use strict compare to check is int, not string
$newArray = ArrayHelper::query($data, array('id' => 2), true, [keepKey = false]);
// Query id=2 AND title='Macbeth'
$newArray = ArrayHelper::query($data, array('id' => 2, 'title' => 'Macbeth'));
// Query id IN (2,3,4)
$newArray = ArrayHelper::query($data, array('id' => array(2, 3, 4)));
// Query id >= 2
$newArray = ArrayHelper::query($data, array('id >=' => 2));
// Use callback, similar to array_filter()
$newArray = ArrayHelper::query($data, function ($key, $value, $strict)
{
    return $value['id'] == 3 || $value['title'] == 'Macbeth';
});
                        If you found a typo or error, please help us improve this document.