Files
ave-cms/help/en/helpers/Arr.md
T
2026-07-27 12:58:44 +03:00

3.7 KiB

Arr - arrays

App\Helpers\Arr - utilities for arrays. The key feature is access using dot notation ('shop.currency.default'), plus search, sort, convert and secure (de)serialization.

use App\Helpers\Arr;

Access by key and dot notation

###get($array, $key, $default = null, $filter = null) Value by key or dot path. If there is no path, it will return $default (maybe short circuit - then it will be called). $filter is an optional value filter function.

$config = ['shop' => ['currency' => ['default' => 'RUB']]];

Arr::get($config, 'shop.currency.default');        // 'RUB'
Arr::get($config, 'shop.currency.rate', 1);        // 1 (пути нет → дефолт)
Arr::get($config, 'shop.currency.rate', function () { return loadRate(); }); // лениво

###set(&$array, $key, $value) Sets the value by dot path (creates nested arrays). Changes the original array by reference.

$data = [];
Arr::set($data, 'meta.seo.title', 'Заголовок');
// $data === ['meta' => ['seo' => ['title' => 'Заголовок']]]

###has($array, $keys) Are all the keys listed (string or array of keys, dot supported).

if (Arr::has($input, ['title', 'rubric_id'])) { /* оба поля пришли */ }
Arr::has($config, 'shop.currency.default');   // true

###exists($array, $key) Does a top-level key exist (without dot parsing, via array_key_exists).


Selection of elements

first($array, $callback = null, $default = null) / last(...)

First/last element; with callback - first/last suitable.

Arr::first($rows);                                   // первый элемент
Arr::first($rows, function ($row) { return $row['active']; }); // первый активный
Arr::last($rows, function ($r) { return $r['qty'] > 0; });

###find($array, $key, $value) Find an element (string) of the array whose element[$key] == $value.

$user = Arr::find($users, 'id', 42);

###countInArray($array, $key, $value) How many elements have a given value by key.


Transformations

###dot($array, $prepend = '') Collapses a nested array into a flat one with dot keys.

Arr::dot(['a' => ['b' => 1, 'c' => 2]]);   // ['a.b' => 1, 'a.c' => 2]

toObject($array) / toArray($object) / objectToArray($object)

Convert array ↔ object (recursively).

$obj = Arr::toObject($row);   // $obj->document_title

isAssoc($array) / is($value)

Whether the array is associative / whether the value is an array.


Sorting

###multiSort($array, $key, $sort_flags = SORT_REGULAR, $sort_way = SORT_ASC) Sort an array of arrays by key value.

$rows = Arr::multiSort($rows, 'position');                 // по возрастанию
$rows = Arr::multiSort($rows, 'price', SORT_NUMERIC, SORT_DESC);

sortArray($data, $field) - a simplified version of sorting by field.


Serialization

safeSerialize(array $array) / safeUnserialize(string $string)

Safe (de)serialization (without executing arbitrary objects). arrayToSerial() / unserialToArray() - paired serialization to a string and back.

$blob = Arr::safeSerialize(['a' => 1]);
$data = Arr::safeUnserialize($blob);      // ['a' => 1]

###stripslashesArray($array) Recursively removes slashes (for data from legacy sources with magic quotes).


Recipes

Safe reading of default settings:

$perPage = (int) Arr::get($settings, 'catalog.per_page', 25);

Checking required form fields:

if (!Arr::has($_POST, ['title', 'rubric_id'])) {
    return $this->error('Не хватает полей');
}

To read from $_GET/$_POST, prefer Request - there is typing (getInt, postStr) and protection.