Progerplace chain
Работа с массивами и коллекциями. Использование цепочек методов, единый список функций для разных ситуаций.
Php >= 7.4
Использование
Для большинства функций доступно 3 способа использования:
// 1. Вызов цепочкой:
Chain::from([1,2,3])
->filter(fn($item) => $item > 2)
->map(fn($item) => $item - 2)
->values()
->toArray()
// 2. Вызов одной функции:
ChainFunc::from([1,2,3])->values()
// 3. Вызов одной функции напрямую для массива:
Func::values([1,2,3]);
Создание объекта
// Объект может быть создан из итерируемого объекта (iterable). Во внутреннем представлении он будет преобразован в массив. Методы класса Func принимают только массивы.
Chain::from([1,2,3])
ChainFunc::from([1,2,3])
// Создание из json:
Chain::fromJson('[1,2,3]');
ChainFunc::fromJson('[1,2,3]');
// Создание из строки:
Chain::fromString('1,2,3', ',');
ChainFunc::fromString('1,2,3', ',');
// Создание из диапазона
Chain::fromRange(1,4)->toArray();
ChainFunc::fromRange(1,4)->toArray();
Экспорт объекта Chain
// В массив
Chain::from([1,2,3])->toArray();
// В json
Chain::from([1,2,3])->toJson();
// В строку
Chain::from([1,2,3])->toString(',');
Работа с дочерними элементами
Можно задавать глубину элементов для обработки обращением к полю elems
$arrFirst = [1,2];
$arrSecond = [
[1,2],
[3,4]
]
$arrThird = [
[
[1,2],
[3,4]
],
[
[1,2],
[3,4]
]
]
Chain::from($arrSecond)->map(fn($item) => $item + 5)->toArray()
ChainFunc::from($arrSecond)->map(fn($item) => $item + 5)
// [6,7]
Chain::from($arrSecond)->elems->map(fn($item) => $item + 5)->toArray()
ChainFunc::from($arrSecond)->elems->map(fn($item) => $item + 5)
// $arrSecond = [
// [6,7],
// [8,9]
// ]
Chain::from($arrThird)->elems->elems->map(fn($item) => $item + 5)->toArray()
ChainFunc::from($arrThird)->elems->elems->map(fn($item) => $item + 5)
// $arrThird = [
// [
// [1,2],
// [3,4]
// ],
// [
// [1,2],
// [3,4]
// ]
// ]
Использование алиасов
Для краткости можно использовать алиасы для основных классов:
Ch -> Chain
Cf -> ChainFunc
F -> Func
А также вспомогательные функции для замены метода from
:
Ch(...) -> Chain::from(...)
Cf(...) -> ChainFunc::from(...)
Пример для всех доступных вариантов:
use Ru\Progerplace\Chain\Chain;
use Ru\Progerplace\Chain\ChainFunc;
use Ru\Progerplace\Chain\Ch;
use Ru\Progerplace\Chain\Cf;
use Ru\Progerplace\Chain\Func;
use Ru\Progerplace\Chain\F;
use function Ru\Progerplace\Chain\Cf;
use function Ru\Progerplace\Chain\Ch;
Chain::from($arr)->map(fn(int $item) => $item + 1)->toArray();
Ch::from($arr)->map(fn(int $item) => $item + 1)->toArray();
Ch($arr)->map(fn(int $item) => $item + 1)->toArray();
ChainFunc::from($arr)->map(fn(int $item) => $item + 1);
Cf::from($arr)->map(fn(int $item) => $item + 1);
Cf($arr)->map(fn(int $item) => $item + 1);
Func::map($arr, fn(int $item) => $item + 1);
F::map($arr, fn(int $item) => $item + 1);
Append
append(mixed ...$added): Chain
Добавить элементы в конец массива. Элементы добавляются как есть.
Ch::from([1,2])->append(3, 4)->toArray();
// [1, 2, 3, 4]
Ch::from([1,2])->append([3, 4])->toArray();
// [1, 2, [3, 4]]
append(mixed ...$added): array
Добавить элементы в конец массива. Элементы добавляются как есть.
Cf::from([1,2])->append(3, 4);
// [1, 2, 3, 4]
Cf::from([1,2])->append([3, 4]);
// [1, 2, [3, 4]]
append(array $arr, mixed ...$items): array
Добавить элементы в конец массива. Элементы добавляются как есть.
Func::append([1, 2], 3, 4);
// [1, 2, 3, 4]
Func::append([1, 2], [3, 4]);
// [1, 2, [3, 4]]
Append merge
merge(mixed ...$items): Chain
Добавить элементы в конец коллекции. Если элемент итерируемый - то будет выполнено слияние. Неитерируемые элементы будут добавлены как есть.
$arr = [1, 2];
Ch::from($arr)->append->merge(3, [4, 5])->toArray();
// [1, 2, 3, 4, 5]
Ch::from($arr)->append->merge(3, [4, 5, [6, 7]])->toArray();
// [1, 2, 3, 4, 5, [6, 7]]
merge(mixed ...$items): array
Добавить элементы в конец коллекции. Если элемент итерируемый - то будет выполнено слияние. Неитерируемые элементы будут добавлены как есть.
$arr = [1, 2];
Cf::from($arr)->append->merge(3, [4, 5]);
// [1, 2, 3, 4, 5]
Ch::from($arr)->append->merge(3, [4, 5, [6, 7]]);
// [1, 2, 3, 4, 5, [6, 7]]
appendMerge(array $arr, mixed ...$items): array
Добавить элементы в конец коллекции. Если элемент итерируемый - то будет выполнено слияние. Неитерируемые элементы будут добавлены как есть.
$arr = [1, 2];
Func::appendMerge($arr, 3, [4, 5]);
// [1, 2, 3, 4, 5]
Func::appendMerge($arr, 3, [4, 5, [6, 7]]);
// [1, 2, 3, 4, 5, [6, 7]]
Append merge from json
mergeFromJson(string $json): Chain
Декодировать json и добавить в конец массива (с распаковкой итерируемых элементов).
$arr = [1, 2];
Ch::from($arr)->append->mergeFromJson('[3, 4, 5, [6, 7]]')->toArray();
// [1, 2, 3, 4, 5, [6, 7]]
mergeFromJson(string $json): array
Декодировать json и добавить в конец массива (с распаковкой итерируемых элементов).
$arr = [1, 2];
Cf::from($arr)->append->mergeFromJson('[3, 4, 5, [6, 7]]');
// [1, 2, 3, 4, 5, [6, 7]]
appendMergeFromJson(array $arr, string $json): array
Декодировать json и добавить в конец массива (с распаковкой итерируемых элементов).
$arr = [1, 2];
Func::appendMergeFromJson($arr, '[3, 4, 5, [6, 7]]');
// [1, 2, 3, 4, 5, [6, 7]]
Append merge from string
mergeFromString(string $str, string $delimiter): Chain
Конвертировать строку в массив и добавить в конец массива (с распаковкой итерируемых элементов).
$arr = [1, 2];
Ch::from($arr)->append->mergeFromString('3,4,5', ',')->toArray();
// [1, 2, 3, 4, 5]
mergeFromString(string $str, string $delimiter): array
Конвертировать строку в массив и добавить в конец массива (с распаковкой итерируемых элементов).
$arr = [1, 2];
Cf::from($arr)->append->mergeFromString('3,4,5', ',');
// [1, 2, 3, 4, 5]
appendMergeFromString(array $arr, string $str, string $delimiter): array
Конвертировать строку в массив и добавить в конец массива (с распаковкой итерируемых элементов).
$arr = [1, 2];
Func::appendMergeFromString($arr, '3,4,5', ',');
// [1, 2, 3, 4, 5]
Chunk
Chunk by count
byCount(int $count, bool $isPreserveKeys): Chain
Разбивает массив на заданное в параметре count
количество массивов. Если count
больше длины массива, то будут дописаны пустые массивы.
Если аргумент isPreserveKeys
равен true
, ключи оригинального массива будут сохранены. По умолчанию - false
, что переиндексирует части числовыми ключами. Если массив не лист - то ключи сохраняются всегда.
Ch::from([1, 2, 3, 4, 5])->chunk->byCount(3)->toArray();
// [
// [1, 2],
// [3, 4],
// [5]
// ]
Ch::from([1, 2, 3, 4, 5])->chunk->byCount(3, true)->toArray();
// [
// [0 => 1, 1 => 2],
// [2 => 3, 3 => 4],
// [4 => 5],
// ],
byCount(int $count, bool $isPreserveKeys): array
Разбивает массив на заданное в параметре count
количество массивов. Если count
больше длины массива, то будут дописаны пустые массивы.
Если аргумент isPreserveKeys
равен true
, ключи оригинального массива будут сохранены. По умолчанию - false
, что переиндексирует части числовыми ключами. Если массив не лист - то ключи сохраняются всегда.
Cf::from([1, 2, 3, 4, 5])->chunk->byCount(3);
// [
// [1, 2],
// [3, 4],
// [5]
// ]
Cf::from([1, 2, 3, 4, 5])->chunk->byCount(3, true);
// [
// [0 => 1, 1 => 2],
// [2 => 3, 3 => 4],
// [4 => 5],
// ],
chunkByCount(array $arr, int $count, bool $isPreserveKeys): array
Разбивает массив на заданное в параметре count
количество массивов. Если count
больше длины массива, то будут дописаны пустые массивы.
Если аргумент isPreserveKeys
равен true
, ключи оригинального массива будут сохранены. По умолчанию - false
, что переиндексирует части числовыми ключами. Если массив не лист - то ключи сохраняются всегда.
Func::chunkByCount([1, 2, 3, 4, 5], 3);
// [
// [1, 2],
// [3, 4],
// [5]
// ]
Func::chunkByCount([1, 2, 3, 4, 5], 3, true);
// [
// [0 => 1, 1 => 2],
// [2 => 3, 3 => 4],
// [4 => 5],
// ],
Chunk by size
bySize(int $size, bool $isPreserveKeys): Chain
Разбивает массив на массивы с заданным в параметре size
количеством элементов. Количество элементов в последней части будет равняться или окажется меньше заданной длины.
Если аргумент isPreserveKeys
равен true
, ключи оригинального массива будут сохранены. По умолчанию - false
, что переиндексирует части числовыми ключами. Если массив не лист - то ключи сохраняются всегда.
Ch::from([1, 2, 3, 4, 5])->chunk->bySize($arr, 2)->toArray();
// [
// [1, 2],
// [3, 4],
// [5]
// ];
Ch::from([1, 2, 3, 4, 5])->chunk->bySize($arr, 2, true)->toArray();
// [
// [0 => 1, 1 => 2],
// [2 => 3, 3 => 4],
// [4 => 5],
// ]
Ссылки
Php.net - array_chunkbySize(int $size, bool $isPreserveKeys): array
Разбивает массив на массивы с заданным в параметре size
количеством элементов. Количество элементов в последней части будет равняться или окажется меньше заданной длины.
Если аргумент isPreserveKeys
равен true
, ключи оригинального массива будут сохранены. По умолчанию - false
, что переиндексирует части числовыми ключами. Если массив не лист - то ключи сохраняются всегда.
Cf::from([1, 2, 3, 4, 5])->chunk->bySize($arr, 2);
// [
// [1, 2],
// [3, 4],
// [5]
// ];
Cf::from([1, 2, 3, 4, 5])->chunk->bySize($arr, 2, true);
// [
// [0 => 1, 1 => 2],
// [2 => 3, 3 => 4],
// [4 => 5],
// ]
Ссылки
Php.net - array_chunkchunkBySize(array $arr, int $size, bool $isPreserveKeys): array
Разбивает массив на массивы с заданным в параметре size
количеством элементов. Количество элементов в последней части будет равняться или окажется меньше заданной длины.
Если аргумент isPreserveKeys
равен true
, ключи оригинального массива будут сохранены. По умолчанию - false
, что переиндексирует части числовыми ключами. Если массив не лист - то ключи сохраняются всегда.
Func::chunkBySize([1, 2, 3, 4, 5], 2);
// [
// [1, 2],
// [3, 4],
// [5]
// ];
Func::chunkBySize($arr, 2, true);
// [
// [0 => 1, 1 => 2],
// [2 => 3, 3 => 4],
// [4 => 5],
// ]
Ссылки
Php.net - array_chunkClear
clear(): Chain
Очистить массив.
Ch::from([1, 2, 3])->clear()->toArray();
// []
$arr = [
'a' => [1,2],
'b' => [3,4]
]
Ch::from($arr)->elems->clear();
// [
// 'a' => [],
// 'b' => []
// ]
clear(): mixed
Очистить массив.
Cf::from([1, 2, 3])->clear()->toArray();
// []
$arr = [
'a' => [1,2],
'b' => [3,4]
]
Cf::from($arr)->elems->clear();
// [
// 'a' => [],
// 'b' => []
// ]
Count
count(): int|Chain
Получить количество элементов.
Ch::from([1, 2, 3])->count();
// 3
Для дочерних элементов:
$arr = [
'a.a' => [
'a.a.a' => [1, 2, 3],
'a.a.b' => [1, 2]
]
];
Ch::from($arr)->elems->elems->count()->toArray();
// $arr = [
// 'a.a' => [
// 'a.a.a' => 3
// 'a.a.b' => 2
// ]
// ];
count(): int|array
Получить количество элементов.
Cf::from([1, 2, 3])->count();
// 3
Для дочерних элементов:
$arr = [
'a.a' => [
'a.a.a' => [1, 2, 3],
'a.a.b' => [1, 2]
]
];
Cf::from($arr)->elems->elems->count();
// $arr = [
// 'a.a' => [
// 'a.a.a' => 3
// 'a.a.b' => 2
// ]
// ];
count(array $arr): int
Получить количество элементов.
Func::count([1, 2, 3]);
// 3
Each
each(callable $callback): Chain
Пройти по массиву и выполнить функцию. Не предназначен для изменения массива, только для сайд-эффектов.
Ch::from([1, 2, 3])->each(fn(int $item, string $key) => echo $key . $item)->toArray();
// [1, 2, 3]
each(callable $callback): array
Пройти по массиву и выполнить функцию. Не предназначен для изменения массива, только для сайд-эффектов.
Cf::from([1, 2, 3])->each(fn(int $item, string $key) => echo $key . $item);
// [1, 2, 3]
each(array $arr, callable $callback): array
Пройти по массиву и выполнить функцию. Не предназначен для изменения массива, только для сайд-эффектов.
Func::each([1, 2, 3], fn(int $item, string $key) => echo $key . $item);
// [1, 2, 3]
Filter
filter(callable $callback): Chain
Оставить элементы коллекции, для которых $callback вернёт true. Ключи сохраняются.
Параметры callback функции - $element
, $key
Ch::from([1, 2, 3])->filter(fn(int $item) => $item > 2)->toArray();
// [2 => 3]
Ch::from(['a' => 1, 'b' => 2, 'c' => 3])->filter(fn(int $item, string $key) => $item > 1 && $key !== 'b' )->toArray();
// ['c' => 3]
filter(callable $callback): array
Оставить элементы коллекции, для которых $callback вернёт true. Ключи сохраняются.
Параметры callback функции - $element
, $key
Cf::from([1, 2, 3])->filter(fn(int $item) => $item > 2);
// [2 => 3]
Cf::from(['a' => 1, 'b' => 2, 'c' => 3])->filter(fn(int $item, string $key) => $item > 1 && $key !== 'b' );
// ['c' => 3]
filter(array $arr, callable $callback): array
Оставить элементы коллекции, для которых $callback вернёт true. Ключи сохраняются.
Параметры callback функции - $element
, $key
Func::filter([1, 2, 3], fn(int $item) => $item > 2)
// [2 => 3]
Func::filter(['a' => 1, 'b' => 2, 'c' => 3], fn(int $item, string $key) => $item > 1 && $key !== 'b' )
// ['c' => 3]
Filter keys
keys(string|int ...$keys): Chain
Оставить только элементы коллекции с указанными ключами. Используется строгое сравнение ===
.
Ch::from(['a' => 1, 'b' => 2, 'c' => 3])->filter->keys('a', 'b')->toArray();
// ['a' => 1, 'b' => 2]
keys(string|int ...$keys): array
Оставить только элементы коллекции с указанными ключами. Используется строгое сравнение ===
.
Cf::from(['a' => 1, 'b' => 2, 'c' => 3])->filter->keys('a', 'b');
// ['a' => 1, 'b' => 2]
filterKeys(array $arr, string|int ...$keys): array
Оставить только элементы коллекции с указанными ключами. Используется строгое сравнение ===
.
Func::filterKeys(['a' => 1, 'b' => 2, 'c' => 3], 'a', 'b');
// ['a' => 1, 'b' => 2]
Filter values
values(mixed ...$values): Chain
Оставить только элементы из коллекции с указанными значениями. Используется строгое сравнение ===
. Ключи сохраняются.
Ch::from(['a' => 1, 'b' => 2, 'c' => 3])->filter->values(1, '2')->toArray();
// ['a' => 1, 'b' => 2]
values(mixed ...$values): array
Оставить только элементы из коллекции с указанными значениями. Используется строгое сравнение ===
. Ключи сохраняются.
Cf::from(['a' => 1, 'b' => 2, 'c' => 3])->filter->values(1, '2');
// ['a' => 1, 'b' => 2]
filterValues(array $arr, mixed ...$values): array
Оставить только элементы из коллекции с указанными значениями. Используется строгое сравнение ===
. Ключи сохраняются.
Func::filterValues(['a' => 1, 'b' => 2, 'c' => 3], 1, '2');
// ['a' => 1, 'b' => 2]
Find
find(callable $callback): mixed|Chain
Найти первое значение, для которого callback функция вернёт true
.
Параметры callback функции - $element
, $key
.
Ch::from(['a' => 1, 'b' => 2])->find(fn(int $item, string $key) => $item == 1);
// 1
Ch::from(['a' => 1, 'b' => 2])->find(fn(int $item, string $key) => $key == 'a');
// 1
Для дочерних элементов:
$arr = [
'a' => [
'a.a' => [
'a.a.a' => 1,
'a.a.b' => 2
]
],
'b' => [5, 6]
];
Ch::from($arr)->elems->elems->find(fn(int $item) => $item == 1);
// [
// 'a' => [
// 'a.a' => 1
// ]
// 'b' => null
// ]
find(callable $callback): mixed
Найти первое значение, для которого callback функция вернёт true
.
Параметры callback функции - $element
, $key
.
Cf::from(['a' => 1, 'b' => 2])->find(fn(int $item, string $key) => $item == 1);
// 1
Cf::from(['a' => 1, 'b' => 2])->find(fn(int $item, string $key) => $key == 'a');
// 1
Для дочерних элементов:
$arr = [
'a' => [
'a.a' => [
'a.a.a' => 1,
'a.a.b' => 2
],
],
'b' => [5, 6]
];
Cf::from($arr)->elems->elems->find(fn(int $item) => $item == 1);
// [
// 'a' => [
// 'a.a' => 1
// ]
// 'b' => null
// ]
find(array $arr, callable $callback): mixed
Найти первое значение, для которого callback функция вернёт true
.
Параметры callback функции - $element
, $key
.
Func::find(['a' => 1, 'b' => 2], fn(int $item, string $key) => $item == 1);
// 1
Func::find(['a' => 1, 'b' => 2], fn(int $item, string $key) => $key == 'a');
// 1
Flip
flip(): Chain
Меняет местами ключи с их значениями в массиве. Повторяющиеся ключи будут молча перезаписаны. Если значение не является корректным ключом (string
или int
), будет выдано предупреждение и данная пара ключ/значение не будет включена в результат.
Ch::from(['a' => 10, 'b' => 20, 'c' => 30])->flip()->toArray();
// ['10' => 'a', '20' => 'b', '30' => 'c'];
flip(): mixed
Меняет местами ключи с их значениями в массиве. Повторяющиеся ключи будут молча перезаписаны. Если значение не является корректным ключом (string
или int
), будет выдано предупреждение и данная пара ключ/значение не будет включена в результат.
Cf::from(['a' => 10, 'b' => 20, 'c' => 30])->flip();
// ['10' => 'a', '20' => 'b', '30' => 'c'];
flip(array $arr): array
Меняет местами ключи с их значениями в массиве. Повторяющиеся ключи будут молча перезаписаны. Если значение не является корректным ключом (string
или int
), будет выдано предупреждение и данная пара ключ/значение не будет включена в результат.
Func::flip(['a' => 10, 'b' => 20, 'c' => 30]);
// ['10' => 'a', '20' => 'b', '30' => 'c'];
Ссылки
Php.net - array_flipFlatten
flatten(int $depth): Chain
Уменьшить вложенность массива на величину depth
.
$arr = [1, [2], [3, [4, [5]]]];
Ch::from($arr)->flatten()->toArray();
// [1, 2, 3, [4, [5]]];
Ch::from($arr)->flatten(2)->toArray();
// [1, 2, 3, 4, [5]];
flatten(int $depth): mixed
Уменьшить вложенность массива на величину depth
.
$arr = [1, [2], [3, [4, [5]]]];
Cf::from($arr)->flatten();
// [1, 2, 3, [4, [5]]];
Cf::from($arr)->flatten(2);
// [1, 2, 3, 4, [5]];
flatten(array $arr, int $depth): array
Уменьшить вложенность массива на величину depth
.
$arr = [1, [2], [3, [4, [5]]]];
Func::flatten($arr);
// [1, 2, 3, [4, [5]]];
Func::flatten($arr, 2);
// [1, 2, 3, 4, [5]];
Flatten all
all(): Chain
Полностью убрать вложенность массива.
$arr = [1, [2], [3, [4, [5]]]];
Ch::from($arr)->flatten->all()->toArray();
// [1, 2, 3, 4, 5];
all(): array
Полностью убрать вложенность массива.
$arr = [1, [2], [3, [4, [5]]]];
Cf::from($arr)->flatten->all();
// [1, 2, 3, 4, 5];
flattenAll(array $arr): array
Полностью убрать вложенность массива.
$arr = [1, [2], [3, [4, [5]]]];
Func::flattenAll($arr);
// [1, 2, 3, 4, 5];
Get
get(string|int $key): mixed
Получить элемент к ключом $key
. Если такого элемента нет - вернётся null
Cf::from([1, 2, 3])->get(1);
// 2
Cf::from([1, 2, 3])->get(10);
// null
get(string|int $key): mixed
Получить элемент к ключом $key
. Если такого элемента нет - вернётся null
Cf::from([1, 2, 3])->get(1);
// 2
Cf::from([1, 2, 3])->get(10);
// null
get(string|int $key): mixed|null
Получить элемент к ключом $key
. Если такого элемента нет - вернётся null
Func::get([1, 2, 3], 1);
// 2
Func::get([1, 2, 3], 10);
// null
Get by number
byNumber(int $number): mixed|null
Получить элемент по номеру в массиве. Если такого элемента нет - вернётся null
.
Ch::from(['a' => 1, 'b' => 2, 'c' => 3])->get->byNumber(1);
// 2
Ch::from(['a' => 1, 'b' => 2, 'c' => 3])->get->byNumber(10);
// null
byNumber(int $number): mixed
Получить элемент по номеру в массиве. Если такого элемента нет - вернётся null
.
Cf::from(['a' => 1, 'b' => 2, 'c' => 3])->get->byNumber(1);
// 2
Cf::from(['a' => 1, 'b' => 2, 'c' => 3])->get->byNumber(10);
// null
getByNumber(array $arr, int $number): mixed|null
Получить элемент по номеру в массиве. Если такого элемента нет - вернётся null
.
Func::getByNumber(['a' => 1, 'b' => 2, 'c' => 3], 1);
// 2
Func::getByNumber($arr, 10);
// null
Get by number or else
byNumberOrElse(int $number, mixed $val): mixed|null
Получить элемент по номеру в массиве. Если такого элемента нет - вернётся $val
.
Ch::from(['a' => 1, 'b' => 2, 'c' => 3])->get->byNumberOrElse(1, 'else');
// 2
Ch::from(['a' => 1, 'b' => 2, 'c' => 3])->get->byNumberOrElse(10, 'else');
// 'else'
byNumberOrElse(int $number, mixed $val): mixed|null
Получить элемент по номеру в массиве. Если такого элемента нет - вернётся $val
.
Cf::from(['a' => 1, 'b' => 2, 'c' => 3])->get->byNumberOrElse(1, 'else');
// 2
Cf::from(['a' => 1, 'b' => 2, 'c' => 3])->get->byNumberOrElse(10, 'else');
// 'else'
getByNumberOrElse(array $arr, int $number, mixed $val): mixed
Получить элемент по номеру в массиве. Если такого элемента нет - вернётся $val
.
Func::getByNumberOrElse(['a' => 1, 'b' => 2, 'c' => 3], 1, 'else');
// 2
Func::getByNumberOrElse(['a' => 1, 'b' => 2, 'c' => 3], 10, 'else');
// 'else'
Get by number or exception
byNumberOrException(int $number): mixed
Получить элемент с ключом $key
. Если такого элемента нет - будет брошено исключение NotFoundException
.
Ch::from([1, 2, 3])->get->byNumberOrException(1);
// 2
Ch::from([1, 2, 3])->get->byNumberOrException(10);
// NotFoundException
byNumberOrException(int $number): mixed
Получить элемент с ключом $key
. Если такого элемента нет - будет брошено исключение NotFoundException
.
Cf::from([1, 2, 3])->get->byNumberOrException(1);
// 2
Cf::from([1, 2, 3])->get->byNumberOrException(10);
// NotFoundException
getByNumberOrException(array $arr, int $number): mixed
Получить элемент с ключом $key
. Если такого элемента нет - будет брошено исключение NotFoundException
.
Func::getByNumberOrException([1, 2, 3], 1);
// 2
Func::getByNumberOrException([1, 2, 3], 10);
// NotFoundException
Get first
first(): mixed|null
Получить первый элемент массива. Если такого элемента нет (массив пустой) - вернётся null
.
Ch::from(['a' => 1, 'b' => 2, 'c' => 3])->get->first();
// 1
Ch::from([])->get->first();
// null
first(): mixed
Получить первый элемент массива. Если такого элемента нет (массив пустой) - вернётся null
.
Cf::from(['a' => 1, 'b' => 2, 'c' => 3])->get->first();
// 1
Cf::from([])->get->first();
// null
getFirst(array $arr): mixed|null
Получить первый элемент массива. Если такого элемента нет (массив пустой) - вернётся null
.
Ch::from(['a' => 1, 'b' => 2, 'c' => 3])->get->first();
// 1
Func::getFirst([]);
// null
Get first or else
firstOrElse(mixed $val): mixed|null
Получить первый элемент массива. Если такого элемента нет (массив пустой) - вернётся $val
.
Ch::from(['a' => 1, 'b' => 2, 'c' => 3])->get->firstOrElse('else');
// 1
Ch::from([])->get->firstOrElse('else');
// 'else'
firstOrElse(mixed $val): mixed|null
Получить первый элемент массива. Если такого элемента нет (массив пустой) - вернётся $val
.
Cf::from(['a' => 1, 'b' => 2, 'c' => 3])->get->firstOrElse('else');
// 1
Cf::from([])->get->firstOrElse('else');
// 'else'
getFirstOrElse(array $arr, mixed $val): mixed|null
Получить первый элемент массива. Если такого элемента нет (массив пустой) - вернётся $val
.
Func::getFirstOrElse(['a' => 1, 'b' => 2, 'c' => 3], 'else');
// 1
Func::getFirstOrElse([], 'else');
// 'else'
Get first or exception
firstOrException(): mixed
Получить первый элемент массива. Если такого элемента нет (массив пустой) - будет брошено исключение NotFoundException
.
Ch::from([1, 2, 3])->get->firstOrException();
// 1
Ch::from([])->get->firstOrException();
// NotFoundException
firstOrException(): mixed
Получить первый элемент массива. Если такого элемента нет (массив пустой) - будет брошено исключение NotFoundException
.
Cf::from([1, 2, 3])->get->firstOrException();
// 1
Cf::from([])->get->firstOrException();
// NotFoundException
getFirstOrException(array $arr): mixed
Получить первый элемент массива. Если такого элемента нет (массив пустой) - будет брошено исключение NotFoundException
.
Func::getFirstOrException([1, 2, 3]);
// 1
Func::getFirstOrException([]);
// NotFoundException
Get last
last(): mixed|null
Получить последний элемент массива. Если такого элемента нет (массив пустой) - вернётся null
.
Ch::from(['a' => 1, 'b' => 2, 'c' => 3])->get->last();
// 3
Ch::from([])->get->last();
// null
last(): mixed
Получить последний элемент массива. Если такого элемента нет (массив пустой) - вернётся null
.
Cf::from(['a' => 1, 'b' => 2, 'c' => 3])->get->last();
// 3
Cf::from([])->get->last();
// null
getLast(array $arr): mixed|null
Получить последний элемент массива. Если такого элемента нет (массив пустой) - вернётся null
.
Func::getLast(['a' => 1, 'b' => 2, 'c' => 3]);
// 3
Func::getLast([]);
// null
Get last or else
lastOrElse(mixed $val): mixed|null
Получить последний элемент массива. Если такого элемента нет (массив пустой) - вернётся $val
.
Ch::from(['a' => 1, 'b' => 2, 'c' => 3])->get->lastOrElse('else');
// 3
Ch::from([])->get->lastOrElse('else');
// 'else'
lastOrElse(mixed $val): mixed|null
Получить последний элемент массива. Если такого элемента нет (массив пустой) - вернётся $val
.
Cf::from(['a' => 1, 'b' => 2, 'c' => 3])->get->lastOrElse('else');
// 3
Cf::from([])->get->lastOrElse('else');
// 'else'
getLastOrElse(array $arr, mixed $val): mixed|null
Получить последний элемент массива. Если такого элемента нет (массив пустой) - вернётся $val
.
Func::getLastOrElse(['a' => 1, 'b' => 2, 'c' => 3], 'else');
// 3
Func::getLastOrElse([], 'else');
// 'else'
Get last or exception
lastOrException(): mixed
Получить последний элемент массива. Если такого элемента нет (массив пустой) - будет брошено исключение NotFoundException
.
Ch::from([1, 2, 3])->get->lastOrException();
// 3
Ch::from([])->get->lastOrException();
// NotFoundException
lastOrException(): mixed
Получить последний элемент массива. Если такого элемента нет (массив пустой) - будет брошено исключение NotFoundException
.
Cf::from([1, 2, 3])->get->lastOrException();
// 3
Cf::from([])->get->lastOrException();
// NotFoundException
getLastOrException(array $arr): mixed
Получить последний элемент массива. Если такого элемента нет (массив пустой) - будет брошено исключение NotFoundException
.
Func::getLastOrException([1, 2, 3]);
// 3
Func::getLastOrException([]);
// NotFoundException
Get or else
orElse(string|int $key, mixed $val): mixed|null
Получить элемент к ключом $key
. Если такого элемента нет - вернётся $val.
Ch::from([1, 2, 3])->get->orElse(1, 'else');
// 2
Ch::from([1, 2, 3])->get->orElse(10, 'else');
// 'else'
orElse(string|int $key, mixed $val): mixed|null
Получить элемент к ключом $key
. Если такого элемента нет - вернётся $val.
Cf::from([1, 2, 3])->get->orElse(1, 'else');
// 2
Cf::from([1, 2, 3])->get->orElse(10, 'else');
// 'else'
getOrElse(array $arr, string|int $key, mixed $val): mixed|null
Получить элемент к ключом $key
. Если такого элемента нет - вернётся $val.
Func::getOrElse([1, 2, 3], 1, 'else');
// 2
Func::getOrElse([1, 2, 3], 10, 'else');
// 'else'
Get or exception
orException(string|int $key): mixed
Получить элемент к ключом $key
. Если такого элемента нет - будет брошено исключение NotFoundException
.
Ch::from([1, 2, 3])->get->orElse(1);
// 2
Func::getOrElse([1, 2, 3], 10);
// NotFoundException
orException(string|int $key): mixed
Получить элемент к ключом $key
. Если такого элемента нет - будет брошено исключение NotFoundException
.
Cf::from([1, 2, 3])->get->orElse(1);
// 2
Func::getOrElse([1, 2, 3], 10);
// NotFoundException
getOrException(array $arr, string|int $key): mixed
Получить элемент к ключом $key
. Если такого элемента нет - будет брошено исключение NotFoundException
Func::getOrElse([1, 2, 3], 1);
// 2
Func::getOrElse([1, 2, 3], 10);
// NotFoundException
Is
Is empty
empty(): bool|Chain
Проверка на пустой массив.
Ch::from([])->isEmpty()
// true
Дочерние элементы:
$arr = [
'a' => [
'a.a' => []
]
];
Ch::from($arr)->elems->elems->is->empty()->toArray();
// [
// 'a' => [
// 'a.a' => true
// ]
// ]
empty(): bool|array
Проверка на пустой массив.
Cf::from([])->isEmpty()
// true
Дочерние элементы:
$arr = [
'a' => [
'a.a' => []
]
];
Cf::from($arr)->elems->elems->is->empty();
// [
// 'a' => [
// 'a.a' => true
// ]
// ]
isEmpty(array $arr): bool
Проверка на пустой массив.
Func::isEmpty([])
// true
Is every
every(): bool|Chain
Проверка "все элементы удовлетворяют условию". Вернёт true
, если для каждого элемента функция callback
вернёт true
.
$arr = [1, 2, 3];
Ch::from($arr)->is->every(fn(int $item) => $item > 0);
// true
Ch::from($arr)->is->every(fn(int $item) => $item > 1);
// false
Дочерние элементы:
$arr = [
'a' => [
'a.a' => [1, 2, 3]
]
];
Ch::from($arr)->elems->elems->is->every(fn(int $item) => $item > 0)->toArray();
// [
// 'a' => [
// 'a.a' => true
// ]
// ]
every(): bool|array
Проверка "все элементы удовлетворяют условию". Вернёт true, если для каждого элемента функция callback вернёт true.
$arr = [1, 2, 3];
Cf::from($arr)->is->every(fn(int $item) => $item > 0);
// true
Cf::from($arr)->is->every(fn(int $item) => $item > 1);
// false
Дочерние элементы:
$arr = [
'a' => [
'a.a' => [1, 2, 3]
]
];
Cf::from($arr)->elems->elems->is->every(fn(int $item) => $item > 0);
// [
// 'a' => [
// 'a.a' => true
// ]
// ]
isEvery(array $arr, callable $callback): bool
Проверка "все элементы удовлетворяют условию". Вернёт true
, если для каждого элемента функция callback вернёт true
.
$arr = [1, 2, 3];
Func::isEvery($arr, fn(int $item) => $item > 0);
// true
Func::isEvery($arr, fn(int $item) => $item > 1);
// false
Is field has value
fieldHasValue(string|int $field, mixed ...$values): bool|Chain
Проверка, что значение поля field
равно хотя бы одному из переданных значений values
. Используется строгое сравнение ===
.
Ch::from(['a' => 1, 'b' => 2])->is->fieldHasValue('a', 1, 10);
// true
fieldHasValue(string|int $field, mixed ...$values): bool|array
Проверка, что значение поля field
равно хотя бы одному из переданных значений values
. Используется строгое сравнение ===
.
Cf::from(['a' => 1, 'b' => 2])->is->fieldHasValue('a', 1, 10);
// true
isFieldHasValue(array $arr, int|string $field, mixed ...$values): bool
Проверка, что значение поля field
равно хотя бы одному из переданных значений values
. Используется строгое сравнение ===
.
Func::isFieldHasValue(['a' => 1, 'b' => 2], 'a', 1, 10);
// true
Is has key
hasKey(mixed ...$key): bool|Chain
Проверка, присутствует ли в массиве хотя бы один ключ из keys
.
Ch::from(['a' => 1, 'b' => 2])->is->hasKey('a', 'd');
// true
hasKey(mixed ...$keys): bool|array
Проверка, присутствует ли в массиве хотя бы один ключ из keys
.
Cf::from(['a' => 1, 'b' => 2])->is->hasKey('a', 'd');
// true
isHasKey(array $arr, int|string ...$keys): bool
Проверка, присутствует ли в массиве хотя бы один ключ из keys
.
Func::isHasKey(['a' => 1, 'b' => 2], 'a', 'd');
// true
Is has value
hasValue(mixed ...$values): bool|Chain
Проверки, есть ли хотя бы одно из переданных значений в массиве. Используется строгое сравнение ===
.
Ch::from([1, 2, 3])->is->hasValue(3, 4);
// true
hasValue(mixed ...$values): bool|array
Проверки, есть ли хотя бы одно из переданных значений в массиве. Используется строгое сравнение ===
.
Cf::from([1, 2, 3])->is->hasValue(3, 4);
// true
isHasValue(array $arr, mixed ...$values): bool
Проверки, есть ли хотя бы одно из переданных значений в массиве. Используется строгое сравнение ===
.
Func::isHasValue([1, 2, 3], 3, 4)
// true
Is list
list(): bool|Chain
Проверяет, является ли массив списком.
Ch::from([0 => 1, 1 => 2, 2 => 3])->is->list();
// true
Ch::from([10 => 1, 11 => 2, 12 => 3])->is->list();
// false
Дочерние элементы:
$arr = [
'a' => [
'a.a' => [0 => 1, 1 => 2, 2 => 3]
]
];
Ch::from($arr)->elems->elems->is->list()->toArray();
// [
// 'a' => [
// 'a.a' => true
// ]
// ]
list(): bool|array
Проверяет, является ли массив списком.
Cf::from([0 => 1, 1 => 2, 2 => 3])->is->list();
// true
Cf::from([10 => 1, 11 => 2, 12 => 3])->is->list();
// false
Дочерние элементы:
$arr = [
'a' => [
'a.a' => [0 => 1, 1 => 2, 2 => 3]
]
];
Cf::from($arr)->elems->elems->is->list();
// [
// 'a' => [
// 'a.a' => true
// ]
// ]
isList(array $arr): bool
Проверяет, является ли массив списком.
Func::isList([0 => 1, 1 => 2, 2 => 3]);
// true
Func::isList([10 => 1, 11 => 2, 12 => 3]);
// false
Ссылки
Php.net - array_is_listIs none
none(): bool|Chain
Проверка "все элементы не удовлетворяют условию". Вернёт true
, если для каждого элемента функция callback
вернёт false
.
Ch::from([1, 2, 3])->is->none(fn(int $item) => $item < 0);
// true
Ch::from([1, 2, 3])->is->none(fn(int $item) => $item > 2);
// false
Дочерние элементы:
$arr = [
'a' => [
'a.a' => [1, 2, 3]
]
];
Ch::from($arr)->elems->elems->is->none(fn(int $item) => $item < 0)->toArray();
// [
// 'a' => [
// 'a.a' => true
// ]
// ]
none(): bool|array
Проверка "все элементы не удовлетворяют условию". Вернёт true
, если для каждого элемента функция callback
вернёт false
.
Cf::from([1, 2, 3])->is->none(fn(int $item) => $item < 0);
// true
Cf::from([1, 2, 3])->is->none(fn(int $item) => $item > 0);
// false
Дочерние элементы:
$arr = [
'a' => [
'a.a' => [1, 2, 3]
]
];
Cf::from($arr)->elems->elems->is->none(fn(int $item) => $item < 0);
// [
// 'a' => [
// 'a.a' => true
// ]
// ]
isNone(array $arr, callable $callback): bool
Проверка "все элементы не удовлетворяют условию". Вернёт true
, если для каждого элемента функция callback
вернёт false
.
Func::isNone([1, 2, 3], fn(int $item) => $item < 0);
// true
Func::isNone($arr, fn(int $item) => $item > 2);
// false
Is not empty
notEmpty(): bool|Chain
Проверка на непустой массив.
Ch::from([])->isNotEmpty()
// true
Дочерние элементы:
$arr = [
'a' => [
'a.a' => []
]
];
Ch::from($arr)->elems->elems->is->notEmpty()->toArray();
// [
// 'a' => [
// 'a.a' => true
// ]
// ]
notEmpty(): bool|array
Проверка на непустой массив.
Cf::from([])->isNotEmpty()
// true
Дочерние элементы:
$arr = [
'a' => [
'a.a' => []
]
];
Cf::from($arr)->elems->elems->is->notEmpty();
// [
// 'a' => [
// 'a.a' => true
// ]
// ]
isNotEmpty(array $arr): bool
Проверка на непустой массив.
Func::isNotEmpty([])
// true
Is any
any(): bool|Chain
Проверка "хотя бы один элемент удовлетворяют условию". Вернёт true
, если хотя бы для одного элемента функция callback
вернёт true
.
Ch::from([1, 2, 3])->is->any(fn(int $item) => $item >= 3);
// true
Ch::from([1, 2, 3])->is->any(fn(int $item) => $item > 10);
// false
Дочерние элементы:
$arr = [
'a' => [
'a.a' => [1, 2, 3]
]
];
Ch::from($arr)->elems->elems->is->any(fn(int $item) => $item > 1)->toArray();
// [
// 'a' => [
// 'a.a' => true
// ]
// ]
any(): bool|array
Проверка "хотя бы один элемент удовлетворяют условию". Вернёт true
, если хотя бы для одного элемента функция callback
вернёт true
.
Cf::from([1, 2, 3])->is->any(fn(int $item) => $item >= 3);
// true
Cf::from([1, 2, 3])->is->any(fn(int $item) => $item > 10);
// false
Дочерние элементы:
$arr = [
'a' => [
'a.a' => [1, 2, 3]
]
];
Cf::from($arr)->elems->elems->is->any(fn(int $item) => $item > 1);
// [
// 'a' => [
// 'a.a' => true
// ]
// ]
isAny(array $arr, callable $callback): bool
Проверка "хотя бы один элемент удовлетворяют условию". Вернёт true
, если хотя бы для одного элемента функция callback
вернёт true
.
$arr = [1, 2, 3];
Func::isAny([1, 2, 3], fn(int $item) => $item >= 3);
// true
Func::isAny($arr, fn(int $item) => $item > 10);
// false
Json
Json decode by
decodeBy(callable $callback): Chain
Декодировать из json поля, для которых $callback
вернул true
.
Ch::from(['a'=>'{"f":1}', 'b'=>'{"f":2}', 'c'=>'{"f":3}'])->json->decodeBy(fn(string $item, string $key) => $item === '{"f":1}' || $key === 'b')->toArray();
// ['a'=>['f'=>1], 'b'=>['f'=>2], 'c'=>'{"f":3}']
decodeBy(callable $callback): array
Декодировать из json поля, для которых $callback
вернул true
.
Cf::from(['a'=>'{"f":1}', 'b'=>'{"f":2}', 'c'=>'{"f":3}'])->json->decodeBy(fn(string $item, string $key) => $item === '{"f":1}' || $key === 'b');
// ['a'=>['f'=>1], 'b'=>['f'=>2], 'c'=>'{"f":3}']
jsonDecodeBy(array $arr, callable $callback): array
Декодировать из json поля, для которых $callback
вернул true
.
Func::jsonDecodeBy(['a'=>'{"f":1}', 'b'=>'{"f":2}', 'c'=>'{"f":3}'], fn(string $item, string $key) => $item === '{"f":1}' || $key === 'b')
// ['a'=>['f'=>1], 'b'=>['f'=>2], 'c'=>'{"f":3}']
Json decode fields
decodeFields(string|int ...$keys): Chain
Декодировать из json поля с перечисленными ключами.
Ch::from(['a'=>'{"f":1}', 'b'=>'{"f":2}', 'c'=>'{"f":3}'])->json->decodeFields('a', 'b')->toArray();
// ['a'=>['f'=>1], 'b'=>['f'=>2], 'c'=>'{"f":3}']
decodeFields(string|int ...$keys): array
Декодировать из json поля с перечисленными ключами.
Cf::from(['a'=>'{"f":1}', 'b'=>'{"f":2}', 'c'=>'{"f":3}'])->json->decodeFields('a', 'b');
// ['a'=>['f'=>1], 'b'=>['f'=>2], 'c'=>'{"f":3}']
jsonDecodeFields(array $arr, ...$keys): array
Декодировать из json поля с перечисленными ключами.
Func::jsonDecodeFields(['a'=>'{"f":1}', 'b'=>'{"f":2}', 'c'=>'{"f":3}'], 'a', 'b')
// ['a'=>['f'=>1], 'b'=>['f'=>2], 'c'=>'{"f":3}']
Json encode by
encodeBy(callable $callback): Chain
Кодировать в json поля, для который $callback
вернул true
. Для json задан флаг JSON_UNESCAPED_UNICODE
.
Ch::from(['a'=>['f'=>1], 'b'=>['f'=>2], 'c'=>['f'=>3]])->json->encodeBy(fn(string $item, string $key) => $item === ['f' => 1] || $key === 'b')->toArray();
// ['a'=>'{"f":1}','b'=>'{"f":2}', 'c'=>['f'=>3]]
encodeBy(callable $callback): array
Кодировать в json поля, для который $callback
вернул true
. Для json задан флаг JSON_UNESCAPED_UNICODE
.
Cf::from(['a'=>['f'=>1], 'b'=>['f'=>2], 'c'=>['f'=>3]])->json->encodeBy(fn(string $item, string $key) => $item === ['f' => 1] || $key === 'b');
// ['a'=>'{"f":1}','b'=>'{"f":2}', 'c'=>['f'=>3]]
jsonEncodeBy(array $arr, callable $callback): array
Кодировать в json поля, для который $callback
вернул true
. Для json задан флаг JSON_UNESCAPED_UNICODE
.
Func::jsonEncodeBy(['a'=>['f'=>1], 'b'=>['f'=>2], 'c'=>['f'=>3]], fn(array $item, string $key) => $item === ['f' => 1] || $key === 'b');
// ['a'=>'{"f":1}','b'=>'{"f":2}', 'c'=>['f'=>3]]
Json encode fields
encodeFields(string|int ...$keys): Chain
Кодировать в json поля с перечисленными ключами. Для json задан флаг JSON_UNESCAPED_UNICODE
.
Ch::from(['a'=>['f'=>1],'b'=>['f'=>2], 'c'=>['f'=>3]])->json->encodeFields('a', 'b')->toArray();
// ['a'=>'{"f":1}','b'=>'{"f":2}', 'c'=>['f'=>3]]
encodeFields(string|int ...$keys): array
Кодировать в json поля с перечисленными ключами. Для json задан флаг JSON_UNESCAPED_UNICODE
.
Cf::from(['a'=>['f'=>1], 'b'=>['f'=>2], 'c'=>['f'=>3]])->json->encodeFields('a', 'b');
// ['a'=>'{"f":1}','b'=>'{"f":2}', 'c'=>['f'=>3]]
jsonEncodeFields(array $arr, string|int ...$keys): array
Кодировать в json поля с перечисленными ключами. Для json задан флаг JSON_UNESCAPED_UNICODE
.
Func::jsonEncodeFields(['a'=>['f'=>1], 'b'=>['f'=>2], 'c'=>['f'=>3]], 'a', 'b');
// ['a'=>'{"f":1}','b'=>'{"f":2}', 'c'=>['f'=>3]]
Keys
keys(): Chain
Возвращает массив ключей.
Ch::from(['a' => 1, 'b' => 2, 'c' => 3])->keys()->toArray();
// ['a', 'b', 'c']
Ссылки
Php.net - array_keyskeys(): array
Возвращает массив ключей.
Cf::from(['a' => 1, 'b' => 2, 'c' => 3])->keys();
// ['a', 'b', 'c']
Ссылки
Php.net - array_keyskeys(array $arr): array
Возвращает массив ключей.
Func::keys(['a' => 1, 'b' => 2, 'c' => 3]);
// ['a', 'b', 'c']
Ссылки
Php.net - array_keysKeys from field
fromField(string|int $field): Chain
Заполнить ключи из значений поля. Повторяющиеся значения будут молча перезаписаны.
$arr = [
['id' => 10, 'val' => 'a'],
['id' => 20, 'val' => 'b'],
]
Ch::from($arr)->keys->fromField('id')->toArray();
// $arr = [
// 10 => ['id' => 10, 'val' => 'a'],
// 20 => ['id' => 20, 'val' => 'b'],
// ]
fromField(string|int $field): array
Заполнить ключи из значений поля. Повторяющиеся значения будут молча перезаписаны.
$arr = [
['id' => 10, 'val' => 'a'],
['id' => 20, 'val' => 'b'],
]
Cf::from($arr)->keys->fromField('id');
// $arr = [
// 10 => ['id' => 10, 'val' => 'a'],
// 20 => ['id' => 20, 'val' => 'b'],
// ]
keysFromField(array $arr, string|int $field): array
Заполнить ключи из значений поля. Повторяющиеся значения будут молча перезаписаны.
$arr = [
['id' => 10, 'val' => 'a'],
['id' => 20, 'val' => 'b'],
]
Func::keysFromField($arr, 'id');
// $arr = [
// 10 => ['id' => 10, 'val' => 'a'],
// 20 => ['id' => 20, 'val' => 'b'],
// ]
Keys get
get(int $number): int|string|null|Chain
Получить ключ по номеру в массиве. Нумерация начинается с 0.
Ch::from(['a' => 1, 'b' => 2])->keys->get(1);
// 'b'
Для дочерних элементов:
$arr = [
'a' => [
'a.a' => ['a' => 10, 'b' => 'a'],
'a.b' => ['a' => 10, 'b' => 'a']
],
];
Ch::from($arr)->elems->elems->keys->get(1)->toArray();
// [
// 'a' => [
// 'a.a' => 'b',
// 'a.b' => 'b',
// ]
// ],
get(int $number): int|string|null|array
Получить ключ по номеру в массиве. Нумерация начинается с 0.
Ch::from(['a' => 1, 'b' => 2])->keys->get(1);
// 'b'
Для дочерних элементов:
$arr = [
'a' => [
'a.a' => ['a' => 10, 'b' => 'a'],
'a.b' => ['a' => 10, 'b' => 'a']
],
];
Cf::from($arr)->elems->elems->keys->get(1);
// [
// 'a' => [
// 'a.a' => 'b',
// 'a.b' => 'b',
// ]
// ],
keysGet(array $arr, int $number): int|string|null
Получить ключ по номеру в массиве. Нумерация начинается с 0.
Func::keysGet(['a' => 1, 'b' => 2], 1);
// 'b'
Keys get first
getFirst(): int|string|null|Chain
Получить первый ключ массива.
Ch::from(['a' => 1, 'b' => 2])->keys->getFirst();
// 'a'
Для дочерних элементов:
$arr = [
'a' => [
'a.a' => ['a' => 10, 'b' => 'a'],
'a.b' => ['a' => 10, 'b' => 'a']
],
];
Ch::from($arr)->elems->elems->keys->getFirst->toArray();
// [
// 'a' => [
// 'a.a' => 'a',
// 'a.b' => 'a',
// ]
// ],
getFirst(): string|int|null|array
Получить первый ключ массива.
Cf::from(['a' => 1, 'b' => 2])->keys->getFirst();
// 'a'
Для дочерних элементов:
$arr = [
'a' => [
'a.a' => ['a' => 10, 'b' => 'a'],
'a.b' => ['a' => 10, 'b' => 'a']
],
];
Cf::from($arr)->elems->elems->keys->getFirst();
// [
// 'a' => [
// 'a.a' => 'a',
// 'a.b' => 'a',
// ]
// ],
keysGetFirst(array $arr): int|string|null
Получить первый ключ массива.
Func::keysGetFirst(['a' => 1, 'b' => 2]);
// 'a'
Keys get last
getLast(): int|string|null|Chain
Получить последний ключ массива.
Ch::from(['a' => 1, 'b' => 2])->keys->getLast();
// 'b'
Для дочерних элементов:
$arr = [
'a' => [
'a.a' => ['a' => 10, 'b' => 'a'],
'a.b' => ['a' => 10, 'b' => 'a']
],
];
Ch::from($arr)->elems->elems->keys->getLast->toArray();
// [
// 'a' => [
// 'a.a' => 'b',
// 'a.b' => 'b',
// ]
// ],
getLast(): int|string|null|array
Получить последний ключ массива.
Cf::from(['a' => 1, 'b' => 2])->keys->getLast();
// 'b'
Для дочерних элементов:
$arr = [
'a' => [
'a.a' => ['a' => 10, 'b' => 'a'],
'a.b' => ['a' => 10, 'b' => 'a']
],
];
Cf::from($arr)->elems->elems->keys->getLast();
// [
// 'a' => [
// 'a.a' => 'b',
// 'a.b' => 'b',
// ]
// ],
keysGetLast(array $arr): int|string|null
Получить последний ключ массива.
Func::keysGetLast(['a' => 1, 'b' => 2]);
// 'b'
Keys map
map(callable $callback): Chain
Изменить значения ключей. Повторяющиеся значения будут молча перезаписаны.
Параметры callback функции - $key
, $element
Ch::from(['a' =>1, 'b' => 2, 'c' => 3])->keys->map(fn(string $key, int $item) => $key . $item)->toArray();
// ['a1' =>1, 'b2' => 2, 'c3' => 3];
map(callable $callback): array
Изменить значения ключей. Повторяющиеся значения будут молча перезаписаны.
Параметры callback функции - $key
, $element
Cf::from(['a' =>1, 'b' => 2, 'c' => 3])->keys->map(fn(string $key, int $item) => $key . $item);
// ['a1' =>1, 'b2' => 2, 'c3' => 3];
keysMap(array $arr, callable $callback): array
Изменить значения ключей. Повторяющиеся значения будут молча перезаписаны.
Параметры callback функции - $key
, $element
Func::keysMap(['a' =>1, 'b' => 2, 'c' => 3], fn(string $key, int $item) => $key . $item);
// ['a1' =>1, 'b2' => 2, 'c3' => 3];
Keys case
To camel case
toCamel(): Chain
Преобразовать стиль ключей к "camelCase".
Ch::from(['var_first' => 1, 'var_second' => 2])->keys->case->toCamel()->toArray();
// ['varFirst' => 1, 'varSecond' => 2]
toCamel(): array
Преобразовать стиль ключей к "camelCase".
Cf::from(['var_first' => 1, 'var_second' => 2])->keys->case->toCamel();
// ['varFirst' => 1, 'varSecond' => 2]
keysCaseToCamel(array $arr): array
Преобразовать стиль ключей к "camelCase".
Func::keysCaseToCamel(['var_first' => 1, 'var_second' => 2]);
// ['varFirst' => 1, 'varSecond' => 2]
To kebab case
toKebab(): Chain
Преобразовать стиль ключей к "kebab-case".
Ch::from(['varFirst' => 1, 'varSecond' => 2])->keys->case->toKebab()->toArray();
// ['var-first' => 1, 'var-second' => 2]
toKebab(): array
Преобразовать стиль ключей к "kebab-case".
Cf::from(['varFirst' => 1, 'varSecond' => 2])->keys->case->toKebab();
// ['var-first' => 1, 'var-second' => 2]
keysCaseToKebab(array $arr): array
Преобразовать стиль ключей к "kebab-case".
Func::keysCaseToKebab(['varFirst' => 1, 'varSecond' => 2]);
// ['var-first' => 1, 'var-second' => 2]
To paskal case
toPaskal(): Chain
Преобразовать стиль ключей к "PaskalCase".
Ch::from(['var_first' => 1, 'var_second' => 2])->keys->case->toPaskal()->toArray()
// ['VarFirst' => 1, 'VarSecond' => 2]
toPaskal(): array
Преобразовать стиль ключей к "PaskalCase".
Cf::from(['var_first' => 1, 'var_second' => 2])->keys->case->toPaskal()
// ['VarFirst' => 1, 'VarSecond' => 2]
keysCaseToPaskal(array $arr): array
Преобразовать стиль ключей к "PaskalCase".
Func::keysCaseToPaskal(['var_first' => 1, 'var_second' => 2])
// ['VarFirst' => 1, 'VarSecond' => 2]
To scream kebab case
toScreamKebab(): Chain
Преобразовать стиль ключей к "SCREAM-KEBAB-CASE".
Ch::from(['varFirst' => 1, 'varSecond' => 2])->keys->case->toScreamKebab()->toArray();
// ['VAR-FIRST' => 1, 'VAR-SECOND' => 2]
toScreamKebab(): array
Преобразовать стиль ключей к "SCREAM-KEBAB-CASE".
Cf::from(['varFirst' => 1, 'varSecond' => 2])->keys->case->toScreamKebab();
// ['VAR-FIRST' => 1, 'VAR-SECOND' => 2]
keysCaseToScreamKebab(array $arr): array
Преобразовать стиль ключей к "SCREAM-KEBAB-CASE".
Func::keysCaseToScreamKebab(['varFirst' => 1, 'varSecond' => 2]);
// ['VAR-FIRST' => 1, 'VAR-SECOND' => 2]
To scream snake case
toScreamSnake(): Chain
Преобразовать стиль ключей к "SCREAM_SNAKE_CASE".
Ch::from(['varFirst' => 1, 'varSecond' => 2])->keys->case->toScreamSnake()->toArray();
// ['VAR_FIRST' => 1, 'VAR_SECOND' => 2]
toScreamSnake(): array
Преобразовать стиль ключей к "SCREAM_SNAKE_CASE".
Cf::from(['varFirst' => 1, 'varSecond' => 2])->keys->case->toScreamSnake();
// ['VAR_FIRST' => 1, 'VAR_SECOND' => 2]
keysCaseToScreamSnake(array $arr): array
Преобразовать стиль ключей к "SCREAM_SNAKE_CASE".
Func::keysCaseToScreamSnake(['varFirst' => 1, 'varSecond' => 2]);
// ['VAR_FIRST' => 1, 'VAR_SECOND' => 2]
To snake case
toSnake(): Chain
Преобразовать стиль ключей к "snake_case".
Ch::from(['varFirst' => 1, 'varSecond' => 2])->keys->case->toSnake()->toArray();
// ['var_first' => 1, 'var_second' => 2]
toSnake(): array
Преобразовать стиль ключей к "snake_case".
Cf::from(['varFirst' => 1, 'varSecond' => 2])->keys->case->toSnake();
// ['var_first' => 1, 'var_second' => 2]
keysCaseToSnake(array $arr): array
Преобразовать стиль ключей к "snake_case".
Func::keysCaseToSnake(['varFirst' => 1, 'varSecond' => 2]);
// ['var_first' => 1, 'var_second' => 2]
Map
map(callable $callback): Chain
Изменить элементы коллекции. Ключи сохраняются.
Параметры callback - $element
, $key
Ch::from(['a' => 1, 'b' => 2])->map(fn(int $item, string $key) => $key . $item)->toArray();
// ['a' => 'a1', 'b' => 'b2']
Ch::from([1, 2, 3]))->map(fn(int $item) => $item + 5)->toArray();
// [6, 7, 8]
Ссылки
Php.net - array_mapmap(callable $callback): array
Изменить элементы коллекции. Ключи сохраняются.
Параметры callback - $element
, $key
Cf::from(['a' => 1, 'b' => 2])->map(fn(int $item, string $key) => $key . $item);
// ['a' => 'a1', 'b' => 'b2']
Cf::from([1, 2, 3]))->map(fn(int $item) => $item + 5);
// [6, 7, 8]
Ссылки
Php.net - array_mapmap(array $arr, callable $callback): array
Изменить элементы коллекции. Ключи сохраняются.
Параметры $callback - $element
, $key
F::map(['a' => 1, 'b' => 2], fn(int $item, string $key) => $key . $item);
// ['a' => 'a1', 'b' => 'b2']
F::map([1, 2, 3], fn(int $item) => $item + 5);
// [6, 7, 8]
Ссылки
Php.net - array_mapOuter
Outer check
check(callable $callback): Chain
Выполнить действие с массивом целиком без его изменения (например, для точки остановки в дебагере).
Параметр callback
- функции - $array
Outer change
change(callable $callback): Chain
Изменить массив целиком.
Параметр callback
- функции - $array
Outer is
is(callable $callback): bool
Проверить логическое условие ко всему массиву.
Параметр callback
- функции - $array
Outer print
print(): Chain
Вывести массив через print_r
(с тегами pre
)
Outer replace with
replaceWith(array $arr): Chain
Заменить массив целиком
$ch = Chain::from([1,2])
$ch->toArray()
// [1,2]
$ch->outer->replaceWith([3,4])->toArray()
// [3,4]
Pad
pad(int $length, mixed $value): Chain
Дополняет массив значением до заданной длины. Если length
больше нуля, то добавляет в конец массива, если меньше - в начало.
Ch::from([1, 2])->pad(5, 0)->toArray();
// [1, 2, 0, 0, 0]
Ch::from([1, 2])->pad(-5, 0)->toArray();
// [0, 0, 0, 1, 2]
Ссылки
Php.net - array_padpad(int $length, mixed $value): array
Дополняет массив значением до заданной длины. Если length
больше нуля, то добавляет в конец массива, если меньше - в начало.
Cf::from([1, 2])->pad(5, 0);
// [1, 2, 0, 0, 0]
Cf::from([1, 2])->pad(-5, 0);
// [0, 0, 0, 1, 2]
Ссылки
Php.net - array_padpad(array $arr, int $length, mixed $value): array
Дополняет массив значением до заданной длины. Если length
больше нуля, то добавляет в конец массива, если меньше - в начало.
Func::pad([1, 2], 5, 0);
// [1, 2, 0, 0, 0]
Func::pad([1, 2], -5, 0);
// [0, 0, 0, 1, 2]
Ссылки
Php.net - array_padPop
pop(): mixed
Извлекает и возвращает последнее значение массива array, сокращает массив array на один элемент.
Функция возвращает извлечённое значение или null, если массив array оказался пустым.
$ch = Ch::from([1, 2, 3]);
$ch->pop();
// 3
$ch->toArray();
// [1, 2]
Для вложенных элементов:
$arr = [
'a' => [
'a.a' => [1, 2, 3],
'a.b' => [4, 5, 6],
]
];
$ch = Ch::from($arr);
$ch->elems->elems->pop();
// [3, 6];
$ch->toArray();
// [
// 'a' => [
// 'a.a' => [1, 2],
// 'a.b' => [4, 5],
// ]
// ],
Ссылки
Php.net - array_shiftpop(): mixed
Извлекает и возвращает последнее значение массива array, сокращает массив array на один элемент.
Функция возвращает извлечённое значение или null, если массив array оказался пустым.
$cf = Cf::from([1, 2, 3]);
$cf->pop();
Func::pop($arrFunc);
// 3
$cf->toArray();
// [1, 2]
Для вложенных элементов:
$arr = [
'a' => [
'a.a' => [1, 2, 3],
'a.b' => [4, 5, 6],
]
];
$cf = Cf::from($arr);
$cf->elems->elems->pop();
// [3, 6];
$ch->toArray();
// [
// 'a' => [
// 'a.a' => [1, 2],
// 'a.b' => [4, 5],
// ]
// ],
Ссылки
Php.net - array_shiftpop(array $arr): mixed|null
Извлекает и возвращает последнее значение массива array, сокращает массив array на один элемент.
Функция возвращает извлечённое значение или null, если массив array оказался пустым.
$arr = [1, 2, 3];
Func::pop($arr);
// 3
$arr;
// [1, 2]
Ссылки
Php.net - array_shiftPrepend
prepend(mixed ...$added): Chain
Добавить элементы в начало коллекции.
Ch::from([3, 4])->prepend(1, 2)->toArray();
// [1, 2, 3, 4]
prepend(mixed ...$added): array
Добавить элементы в начало коллекции.
Cf::from([3, 4])->prepend(1, 2);
// [1, 2, 3, 4]
prepend(array $arr, mixed ...$items): array
Добавить элементы в начало коллекции.
Func::prepend([3, 4], 1, 2);
// [1, 2, 3, 4]
Prepend merge
merge(mixed ...$items): Chain
Добавить элементы в начало массива. Если элемент итерируемый - то будет выполнено слияние. Неитерируемые элементы будут добавлены как есть.
$arr = [1, 2];
Ch::from($arr)->prepend->merge(3, [4, 5, [6, 7]])->toArray();
// [1, 2, 3, 4, 5, [6, 7]]
merge(mixed ...$items): array
Добавить элементы в начало массива. Если элемент итерируемый - то будет выполнено слияние. Неитерируемые элементы будут добавлены как есть.
$arr = [1, 2];
Cf::from($arr)->prepend->merge(3, [4, 5, [6, 7]]);
// [1, 2, 3, 4, 5, [6, 7]]
prependMerge(array $arr, ...$items): array
Добавить элементы в начало массива. Если элемент итерируемый - то будет выполнено слияние. Неитерируемые элементы будут добавлены как есть.
$arr = [1, 2];
Ch::from($arr)->prepend->merge(3, [4, 5, [6, 7]])->toArray();
Cf::from($arr)->prepend->merge(3, [4, 5, [6, 7]]);
Func::prependMerge($arr, 3, [4, 5, [6, 7]]);
// [1, 2, 3, 4, 5, [6, 7]]
Prepend merge from json
mergeFromJson(string $json): Chain
Декодировать json и добавить в начало массива (с распаковкой итерируемых элементов).
$arr = [1, 2];
Ch::from($arr)->prepend->mergeFromJson('[3,4,5,[6,7]]')->toArray();
// [1, 2, 3, 4, 5, [6, 7]]
mergeFromJson(string $json): array
Декодировать json и добавить в начало массива (с распаковкой итерируемых элементов).
$arr = [1, 2];
Cf::from($arr)->prepend->mergeFromJson('[3,4,5,[6,7]]');
// [1, 2, 3, 4, 5, [6, 7]]
prependMergeFromJson(array $arr, string $json): array
Декодировать json и добавить в начало массива (с распаковкой итерируемых элементов).
$arr = [1, 2];
Ch::from($arr)->prepend->mergeFromJson('[3,4,5,[6,7]]')->toArray();
Cf::from($arr)->prepend->mergeFromJson('[3,4,5,[6,7]]');
Func::prependMergeFromJson($arr, '[3,4,5,[6,7]]');
// [1, 2, 3, 4, 5, [6, 7]]
Prepend merge from string
mergeFromString(string $str, string $delimiter): Chain
Конвертировать строку в массив и добавить в начало массива (с распаковкой итерируемых элементов)
$arr = [1, 2];
Ch::from($arr)->prepend->mergeFromString('3,4,5', ',')->toArray();
// [1, 2, 3, 4, 5]
mergeFromString(string $str, string $delimiter): array
Конвертировать строку в массив и добавить в начало массива (с распаковкой итерируемых элементов)
$arr = [1, 2];
Cf::from($arr)->prepend->mergeFromString('3,4,5', ',');
// [1, 2, 3, 4, 5]
prependMergeFromString(array $arr, string $str, string $delimiter): array
Конвертировать строку в массив и добавить в начало массива (с распаковкой итерируемых элементов)
$arr = [1, 2];
Ch::from($arr)->prepend->mergeFromString('3,4,5', ',')->toArray();
Cf::from($arr)->prepend->mergeFromString('3,4,5', ',');
Func::prependMergeFromJson($arr, '3,4,5', ',');
// [1, 2, 3, 4, 5]
Reject
reject(callable $callback): Chain
Убрать элементы из коллекции, для которых функция $callback вернула true
. Ключи сохраняются.
Параметры callback функции - $element
, $key
.
Ch::from([1, 2, 3, 4, 5])->reject(fn(int $item) => $item < 4)->toArray();
// [3 => 4, 4 => 5]
Ch::from(['a' => null, 'b' => 'foo', 'c' => ''])->reject(fn(?string $item, string $key) => $key === 'a' || $item === 'foo')->toArray();
// ['c' => '']
reject(callable $callback): array
Убрать элементы из коллекции, для которых функция $callback вернула true
. Ключи сохраняются.
Параметры callback функции - $element
, $key
.
Cf::from([1, 2, 3, 4, 5])->reject(fn(int $item) => $item < 4);
// [3 => 4, 4 => 5]
Cf::from(['a' => null, 'b' => 'foo', 'c' => ''])->reject(fn(?string $item, string $key) => $key === 'a' || $item === 'foo');
// ['c' => '']
reject(array $arr, callable $callback): array
Убрать элементы из коллекции, для которых функция $callback вернула true
. Ключи сохраняются.
Параметры callback функции - $element
, $key
.
Cf::from([1, 2, 3, 4, 5])->reject(fn(int $item) => $item < 4);
Ch::from([1, 2, 3, 4, 5])->reject(fn(int $item) => $item < 4)->toArray();
Func::reject([1, 2, 3, 4, 5], fn(int $item) => $item < 4);
// [3 => 4, 4 => 5]
Func::reject(['a' => null, 'b' => 'foo', 'c' => ''], fn(?string $item, string $key) => $key === 'a' || $item === 'foo');
// ['c' => '']
Reject empty
empty(): Chain
Убрать пустые элементы из коллекции. Проверка осуществляется методом empty
. Ключи сохраняются.
Ch::from([null, 'foo', ''])->reject->empty()->toArray();
// [1 => 'foo']
Ch::from(['a' => null, 'b' => 'foo', 'c' => ''])->reject->empty()->toArray();
// ['b' => 'foo']
empty(): array
Убрать пустые элементы из коллекции. Проверка осуществляется методом empty
. Ключи сохраняются.
Cf::from([null, 'foo', ''])->reject->empty();
// [1 => 'foo']
Cf::from(['a' => null, 'b' => 'foo', 'c' => ''])->reject->empty();
// ['b' => 'foo']
rejectEmpty(array $arr): array
Убрать пустые элементы из коллекции. Проверка осуществляется методом empty
. Ключи сохраняются.
Cf::from([null, 'foo', ''])->reject->empty();
Ch::from([null, 'foo', ''])->reject->empty()->toArray();
Func::rejectEmpty([null, 'foo', '']);
// [1 => 'foo']
Func::rejectEmpty(['a' => null, 'b' => 'foo', 'c' => '']);
// ['b' => 'foo']
Reject keys
keys(string|int ...$keys): Chain
Убрать элементы из коллекции с указанными ключами. Используется строгое сравнение ===
.
Ch::from(['a' => 1, 'b' => 2, 'c' => 3])->reject->keys('b', 'c')->toArray();
// ['a' => 1]
keys(string|int ...$keys): array
Убрать элементы из коллекции с указанными ключами. Используется нестрогое сравнение ===
.
Cf::from(['a' => 1, 'b' => 2, 'c' => 3])->reject->keys('b', 'c');
// ['a' => 1]
rejectKeys(array $arr, string|int ...$keys): array
Убрать элементы из коллекции с указанными ключами. Используется строгое сравнение ===
.
Func::rejectKeys(['a' => 1, 'b' => 2, 'c' => 3], 'b', 'c');
// ['a' => 1]
Reject null
null(): Chain
Убрать null элементы из коллекции. Проверка осуществляется методом is_null
. Ключи сохраняются.
Ch::from([null, 'foo', ''])->reject->null()->toArray();
// [1 => 'foo', 2 => '']
Ch::from(['a' => null, 'b' => 'foo', 'c' => ''])->reject->null()->toArray();
// ['b' => 'foo', 'c' => '']
null(): array
Убрать null элементы из коллекции. Проверка осуществляется методом is_null
. Ключи сохраняются.
Cf::from([null, 'foo', ''])->reject->null();
// [1 => 'foo', 2 => '']
Cf::from(['a' => null, 'b' => 'foo', 'c' => ''])->reject->null();
// ['b' => 'foo', 'c' => '']
rejectNull(array $arr): array
Убрать null элементы из коллекции. Проверка осуществляется методом is_null
. Ключи сохраняются.
Cf::from([null, 'foo', ''])->reject->null();
Ch::from([null, 'foo', ''])->reject->null()->toArray();
Func::rejectNull([null, 'foo', '']);
// [1 => 'foo', 2 => '']
Func::rejectNull(['a' => null, 'b' => 'foo', 'c' => '']);
// ['b' => 'foo', 'c' => '']
Reject values
values(mixed ...$values): Chain
Убрать элементы из коллекции с указанными значениями. Используется строгое сравнение ===
. Ключи сохраняются.
Ch::from(['a' => 1, 'b' => 2, 'c' => 3])->reject->values(1, '2')->toArray()
// ['c' => 3]
values(mixed ...$values): array
Убрать элементы из коллекции с указанными значениями. Используется нестрогое сравнение ===
. Ключи сохраняются.
Cf::from(['a' => 1, 'b' => 2, 'c' => 3])->reject->values(1, '2')
// ['c' => 3]
rejectValues(array $arr, mixed ...$values): array
Убрать элементы из коллекции с указанными значениями. Используется строгое сравнение ===
. Ключи сохраняются.
Func::rejectValues(['a' => 1, 'b' => 2, 'c' => 3], 1, '2')
// ['c' => 3]
Reverse
reverse(bool $isPreserveNumericKeys = false): Chain
Элементы коллекции в обратном порядке.
Если $preserveNumericKeys
установлено в true
, то числовые ключи будут сохранены. Нечисловые ключи не подвержены этой опции и всегда сохраняются.
Ch::from([1, 2, 3])->reverse()->toArray();
// [3, 2, 1]
Ch::from([1, 2, 3], true)->reverse()->toArray();
[2 => 3, 1 => 2, 0 => 1]
Ссылки
Php.net - array_reversereverse(bool $isPreserveNumericKeys = false): array
Элементы коллекции в обратном порядке.
Если $preserveNumericKeys
установлено в true
, то числовые ключи будут сохранены. Нечисловые ключи не подвержены этой опции и всегда сохраняются.
Cf::from([1, 2, 3])->reverse();
// [3, 2, 1]
Cf::from([1, 2, 3], true)->reverse();
[2 => 3, 1 => 2, 0 => 1]
Ссылки
Php.net - array_reversereverse(array $arr, bool $isPreserveNumericKeys = false): array
Элементы коллекции в обратном порядке.
Если $preserveNumericKeys
установлено в true
, то числовые ключи будут сохранены. Нечисловые ключи не подвержены этой опции и всегда сохраняются.
Func::reverse([1, 2, 3])
// [3, 2, 1]
Func::reverse([1, 2, 3], true)
[2 => 3, 1 => 2, 0 => 1]
Ссылки
Php.net - array_reverseReplace
replace(array ...$replacement): Chain
Заменяет элементы массива элементами других массивов.
Ch::from([1, 2, 3, 4, 5])->replace([6, 7], [4 => 8])->toArray();
// [6, 7, 3, 4, 8];
Ссылки
Php.net - array_replacereplace(array ...$replacement): array
Заменяет элементы массива элементами других массивов.
Cf::from([1, 2, 3, 4, 5])->replace([6, 7], [4 => 8]);
// [6, 7, 3, 4, 8];
Ссылки
Php.net - array_replacereplace(array $array, array ...$replacements): array
Заменяет элементы массива элементами других массивов.
$arr = [1, 2, 3, 4, 5];
Func::replace($arr, [6, 7], [4 => 8]);
// [6, 7, 3, 4, 8];
Ссылки
Php.net - array_replaceReplace recursive
recursive(mixed ...$replacement): Chain
Заменяет рекурсивно элементы массива элементами других массивов.
$arr = [
[1, 2, 3],
[4, 5, 6],
];
$arrReplace1 = [
1 => [1 => 7, 2 => 8]
];
$arrReplace2 = [
1 => [2 => 9]
];
Ch::from($arr)->replace->recursive($arrReplace1, $arrReplace2)->toArray();
// [
// [1, 2, 3],
// [4, 7, 9],
// ]
recursive(array ...$replacement): array
Заменяет рекурсивно элементы массива элементами других массивов.
$arr = [
[1, 2, 3],
[4, 5, 6],
];
$arrReplace1 = [
1 => [1 => 7, 2 => 8]
];
$arrReplace2 = [
1 => [2 => 9]
];
Cf::from($arr)->replace->recursive($arrReplace1, $arrReplace2);
// [
// [1, 2, 3],
// [4, 7, 9],
// ]
replaceRecursive(array $array, array ...$replacements): array
Заменяет рекурсивно элементы массива элементами других массивов.
$arr = [
[1, 2, 3],
[4, 5, 6],
];
$arrReplace1 = [
1 => [1 => 7, 2 => 8]
];
$arrReplace2 = [
1 => [2 => 9]
];
Func::replace($arr, $arrReplace1, $arrReplace2);
// [
// [1, 2, 3],
// [4, 7, 9],
// ]
Shift
shift(): mixed
Извлекает и возвращает первое значение массива array, сокращает массив array на один элемент и сдвигает остальные элементы в начало. Числовые ключи массива изменятся так, чтобы нумерация начиналась с нуля, тогда как литеральные ключи не изменятся.
Функция возвращает извлечённое значение или null, если массив array оказался пустым.
$ch = Ch::from([1, 2, 3]);
$ch->shift();
// 1
$ch->toArray();
// [2, 3]
Для вложенных элементов:
$arr = [
'a' => [
'a.a' => [1, 2, 3],
'a.b' => [4, 5, 6],
]
];
$ch = Ch::from($arr);
$ch->elems->elems->shift();
// [1, 4];
$ch->toArray();
// [
// 'a' => [
// 'a.a' => [2, 3],
// 'a.b' => [5, 6],
// ]
// ],
Ссылки
Php.net - array_shiftshift(): mixed
Извлекает и возвращает первое значение массива array, сокращает массив array на один элемент и сдвигает остальные элементы в начало. Числовые ключи массива изменятся так, чтобы нумерация начиналась с нуля, тогда как литеральные ключи не изменятся.
Функция возвращает извлечённое значение или null, если массив array оказался пустым.
$cf = Cf::from([1, 2, 3]);
$cf->shift();
// 1
$cf->toArray();
// [2, 3]
Для вложенных элементов:
$arr = [
'a' => [
'a.a' => [1, 2, 3],
'a.b' => [4, 5, 6],
]
];
$cf = Cf::from($arr);
$cf->elems->elems->shift();
// [1, 4];
$cf->toArray();
// [
// 'a' => [
// 'a.a' => [2, 3],
// 'a.b' => [5, 6],
// ]
// ],
Ссылки
Php.net - array_shiftshift(array $arr): mixed|null
Извлекает и возвращает первое значение массива array, сокращает массив array на один элемент и сдвигает остальные элементы в начало. Числовые ключи массива изменятся так, чтобы нумерация начиналась с нуля, тогда как литеральные ключи не изменятся.
Функция возвращает извлечённое значение или null, если массив array оказался пустым.
$arr = [1, 2, 3];
Func::shift($arr);
// 1
$arr;
// [2, 3]
Ссылки
Php.net - array_shiftSlice
slice(int $offset, int|null $length, bool $isPreserveKeys): mixed
Выбирает срез массива.
Параметр offset
обозначает положение в массиве, а не ключ.
Если параметр offset
неотрицательный, последовательность начнётся на указанном расстоянии от начала array.
Если offset
отрицательный, последовательность начнётся с конца array.
Если в эту функцию передан положительный параметр length
, последовательность будет включать количество элементов меньшее или равное length
.
Если количество элементов массива меньше чем параметр length
, то только доступные элементы массива будут присутствовать.
Если в эту функцию передан отрицательный параметр length
, последовательность остановится на указанном расстоянии от конца массива.
Если он опущен, последовательность будет содержать все элементы с offset
до конца массива.
Если смещение больше длины массива, то будет возвращён пустой массив.
$arr = [10 => 1, 2, 3, 4, 5];
Ch::from($arr)->slice(1, 2)->toArray();
Func::slice($arr, 1, 2);
// [1, 2]
Ch::from($arr)->slice(1, 2, true)->toArray();
// [10 => 1, 11 => 2]
Ссылки
Php.net - array_sliceslice(): mixed
Выбирает срез массива.
Параметр offset
обозначает положение в массиве, а не ключ.
Если параметр offset
неотрицательный, последовательность начнётся на указанном расстоянии от начала array.
Если offset
отрицательный, последовательность начнётся с конца array.
Если в эту функцию передан положительный параметр length
, последовательность будет включать количество элементов меньшее или равное length
.
Если количество элементов массива меньше чем параметр length
, то только доступные элементы массива будут присутствовать.
Если в эту функцию передан отрицательный параметр length
, последовательность остановится на указанном расстоянии от конца массива.
Если он опущен, последовательность будет содержать все элементы с offset
до конца массива.
Если смещение больше длины массива, то будет возвращён пустой массив.
$arr = [10 => 1, 2, 3, 4, 5];
Cf::from($arr)->slice(1, 2);
// [1, 2]
Cf::from($arr)->slice(1, 2, true);
// [10 => 1, 11 => 2]
Ссылки
Php.net - array_sliceslice(array $arr, int $offset, int|null $length, bool $isPreserveKeys): array
Выбирает срез массива.
Параметр offset
обозначает положение в массиве, а не ключ.
Если параметр offset
неотрицательный, последовательность начнётся на указанном расстоянии от начала array.
Если offset
отрицательный, последовательность начнётся с конца array.
Если в эту функцию передан положительный параметр length
, последовательность будет включать количество элементов меньшее или равное length
.
Если количество элементов массива меньше чем параметр length
, то только доступные элементы массива будут присутствовать.
Если в эту функцию передан отрицательный параметр length
, последовательность остановится на указанном расстоянии от конца массива.
Если он опущен, последовательность будет содержать все элементы с offset
до конца массива.
Если смещение больше длины массива, то будет возвращён пустой массив.
$arr = [10 => 1, 2, 3, 4, 5];
Func::slice($arr, 1, 2);
// [1, 2]
Func::slice($arr, 1, 2, true);
// [10 => 1, 11 => 2]
Ссылки
Php.net - array_sliceSlice head
head(int $length, bool $isPreserveKeys): Chain
Выбирает срез массива - length
элементов с начала массива.
$arr = [10 => 1, 2, 3, 4, 5];
Ch::from($arr)->slice->head(2)->toArray();
// [1, 2]
Ch::from($arr)->slice->head(2, true)->toArray();
// [10 => 1, 11 => 2]
head(int $length, bool $isPreserveKeys): array
Выбирает срез массива - length
элементов с начала массива.
$arr = [10 => 1, 2, 3, 4, 5];
Cf::from($arr)->slice->head(2);
// [1, 2]
Cf::from($arr)->slice->head(2, true);
// [10 => 1, 11 => 2]
sliceHead(array $arr, int $length, bool $isPreserveKeys): array
Выбирает срез массива - length
элементов с начала массива.
$arr = [10 => 1, 2, 3, 4, 5];
Func::sliceHead($arr, 2);
// [1, 2]
Func::sliceHead($arr, 2, true);
// [10 => 1, 11 => 2]
Slice tail
tail(int $length, bool $isPreserveKeys): Chain
Выбирает срез массива - length
элементов с конца массива.
$arr = [10 => 1, 2, 3, 4, 5];
Ch::from($arr)->slice->tail(2)->toArray();
// [4, 5]
Ch::from($arr)->slice->tail(2, true)->toArray();
// [13 => 4, 14 => 5]
tail(int $length, bool $isPreserveKeys): array
Выбирает срез массива - length
элементов с конца массива.
$arr = [10 => 1, 2, 3, 4, 5];
Cf::from($arr)->slice->tail(2);
// [4, 5]
Cf::from($arr)->slice->tail(2, true);
// [13 => 4, 14 => 5]
sliceTail(array $arr, int $length, bool $isPreserveKeys): array
Выбирает срез массива - length
элементов с конца массива.
$arr = [10 => 1, 2, 3, 4, 5];
Func::sliceTail($arr, 2);
// [4, 5]
Func::sliceTail($arr, 2, true);
// [13 => 4, 14 => 5]
Splice
splice(int $offset, int|null $length, mixed $replacement): Chain|array
Удаляет часть массива и заменяет её новыми элементами
$arr = [1, 2, 3, 4];
$ch = Ch::from($arr);
$ch->splice(2, 1, 'item');
// [3]
$ch->toArray();
// [1, 2, 'item', 4]
Для вложенных элементов:
$arr = [
'a' => [
'a.a' => [1, 2, 3, 4],
'a.b' => [5, 6, 7, 8],
]
];
$ch = Ch::from($arr);
$ch->elems->elems->splice(2, 1, 'item');
// [
// [3],
// [7],
// ]
$ch->toArray();
// [
// 'a' => [
// 'a.a' => [1, 2, 'item', 4],
// 'a.b' => [5, 6, 'item', 8],
// ]
// ]
Ссылки
Php.net - array_splicesplice(int $offset, int|null $length, mixed $replacement): array
Удаляет часть массива и заменяет её новыми элементами
$arr = [1, 2, 3, 4];
$cf = Cf::from($arr);
$ch->splice(2, 1, 'item');
// [3]
$cf->toArray();
// [1, 2, 'item', 4]
Для вложенных элементов:
$arr = [
'a' => [
'a.a' => [1, 2, 3, 4],
'a.b' => [5, 6, 7, 8],
]
];
$cf = Cf::from($arr);
$cf->elems->elems->splice(2, 1, 'item');
// [
// [3],
// [7],
// ]
$cf->toArray();
// [
// 'a' => [
// 'a.a' => [1, 2, 'item', 4],
// 'a.b' => [5, 6, 'item', 8],
// ]
// ]
Ссылки
Php.net - array_splicesplice(array $arr, int $offset, int|null $length, mixed $replacement): array
Удаляет часть массива и заменяет её новыми элементами
$arr = [1, 2, 3, 4];
Func::splice($arr, 2, 1, 'item');
// [3]
$arr;
// [1, 2, 'item', 4]
Ссылки
Php.net - array_spliceSplice head
head(int|null $length, mixed $replacement): Chain|array
Удаляет часть массива с начала массива и заменяет её новыми элементами.
$arr = [1, 2, 3, 4];
$ch = Ch::from($arr);
$ch->splice->head(2, 'item');
// [1, 2]
$ch->toArray();
// ['item', 3, 4]
Для вложенных элементов:
$arr = [
'a' => [
'a.a' => [1, 2, 3, 4],
'a.b' => [5, 6, 7, 8],
]
];
$ch = Ch::from($arr);
$ch->elems->elems->splice->head(2, 'item');
// [
// [1, 2],
// [5, 6],
// ]
$ch->toArray();
// [
// 'a' => [
// 'a.a' => ['item', 3, 4],
// 'a.b' => ['item', 7, 8],
// ]
// ]
head(int|null $length, mixed $replacement): array
Удаляет часть массива с начала массива и заменяет её новыми элементами.
$arr = [1, 2, 3, 4];
$cf = Cf::from($arr);
$cf->splice->head(2, 'item');
// [1, 2]
$cf->toArray();
// ['item', 3, 4]
Для вложенных элементов:
$arr = [
'a' => [
'a.a' => [1, 2, 3, 4],
'a.b' => [5, 6, 7, 8],
]
];
$cf = Cf::from($arr);
$cf->elems->elems->splice->head(2, 'item');
// [
// [1, 2],
// [5, 6],
// ]
$cf->toArray();
// [
// 'a' => [
// 'a.a' => ['item', 3, 4],
// 'a.b' => ['item', 7, 8],
// ]
// ]
spliceHead(array $arr, int|null $length, mixed $replacement): array
Удаляет часть массива с начала массива и заменяет её новыми элементами.
$arr = [1, 2, 3, 4];
Func::spliceHead($arr, 2, 1, 'item');
// [1, 2]
$arr;
// ['item', 3, 4]
Splice tail
tail(int|null $length, mixed $replacement): Chain|array
Удаляет часть массива с конца массива и заменяет её новыми элементами
$arr = [1, 2, 3, 4];
$ch = Ch::from($arr);
$ch->splice->tail(2, 'item');
// [1, 2]
$ch->toArray();
// ['item', 3, 4]
Для вложенных элементов:
$arr = [
'a' => [
'a.a' => [1, 2, 3, 4],
'a.b' => [5, 6, 7, 8],
]
];
$ch = Ch::from($arr);
$ch->elems->elems->splice->tail(2, 'item');
// [
// [1, 2],
// [5, 6],
// ]
$ch->toArray();
// [
// 'a' => [
// 'a.a' => ['item', 3, 4],
// 'a.b' => ['item', 7, 8],
// ]
// ],
tail(int|null $length, mixed $replacement): array
Удаляет часть массива с конца массива и заменяет её новыми элементами
$arr = [1, 2, 3, 4];
$cf = Cf::from($arr);
$cf->splice->tail(2, 'item');
// [1, 2]
$arr;
$cf->toArray();
// ['item', 3, 4]
Для вложенных элементов:
$arr = [
'a' => [
'a.a' => [1, 2, 3, 4],
'a.b' => [5, 6, 7, 8],
]
];
$cf = Cf::from($arr);
$cf->elems->elems->splice->tail(2, 'item');
// [
// [1, 2],
// [5, 6],
// ]
$cf->toArray();
// [
// 'a' => [
// 'a.a' => ['item', 3, 4],
// 'a.b' => ['item', 7, 8],
// ]
// ],
spliceTail(array $arr, int|null $length, mixed $replacement): array
Удаляет часть массива с конца массива и заменяет её новыми элементами
$arr = [1, 2, 3, 4];
Func::spliceTail($arr, 2, 1, 'item');
// [1, 2]
$arr;
// ['item', 3, 4]
Sort
sort(callable $callback): mixed
Сортировка массива. Используется функция usort.
Ch::from([3, 1, 2])->sort(fn(int $a, int $b) => $a <=> $b)->toArray();
// [1, 2, 3]
Сортировка строк:
$arr = [1, 3, 11, 2];
Ch::from($arr)->sort(fn(int $a, int $b) => strcmp($a, $b));
// [1, 11, 2, 3]
Ch::from($arr)->sort(fn(int $a, int $b) => strnatcmp($a, $b));
// [1, 2, 3, 11]
Компараторы для строк:
strcasecmp
— сравнивает строки без учёта регистра в бинарно безопасном режиме, подробнееstrcmp
— сравнивает строки в бинарно-безопасном режиме: как последовательности байтов подробнееstrnatcasecmp
— сравнивает строки без учёта регистра по алгоритму natural order подробнееstrnatcmp
— сравнивает строк алгоритмом natural order подробнееstrncasecmp
— сравнивает первые n символов строк без учёта регистра в бинарно-безопасном режиме подробнееstrncmp
— сравнивает первые n символов строк в бинарно безопасном режиме подробнее
sort(callable $callback): array
Сортировка массива. Используется функция usort.
Cf::from([3, 1, 2])->sort(fn(int $a, int $b) => $a <=> $b);
// [1, 2, 3]
Сортировка строк:
$arr = [1, 3, 11, 2];
Cf::from($arr)->sort(fn(int $a, int $b) => strcmp($a, $b));
// [1, 11, 2, 3]
Cf::from($arr)->sort(fn(int $a, int $b) => strnatcmp($a, $b));
// [1, 2, 3, 11]
Компараторы для строк:
strcasecmp
— сравнивает строки без учёта регистра в бинарно безопасном режиме, подробнееstrcmp
— сравнивает строки в бинарно-безопасном режиме: как последовательности байтов подробнееstrnatcasecmp
— сравнивает строки без учёта регистра по алгоритму natural order подробнееstrnatcmp
— сравнивает строк алгоритмом natural order подробнееstrncasecmp
— сравнивает первые n символов строк без учёта регистра в бинарно-безопасном режиме подробнееstrncmp
— сравнивает первые n символов строк в бинарно безопасном режиме подробнее
sort(array $arr, callable $callback): array
Сортировка массива. Используется функция usort.
Func::sort([3, 1, 2], fn(int $a, int $b) => $a <=> $b));
// [1, 2, 3]
Сортировка строк:
$arr = [1, 3, 11, 2];
Func::sort($arr, fn(int $a, int $b) => strcmp($a, $b));
// [1, 11, 2, 3]
Func::sort($arr, fn(int $a, int $b) => strnatcmp($a, $b));
// [1, 2, 3, 11]
Компараторы для строк:
strcasecmp
— сравнивает строки без учёта регистра в бинарно безопасном режиме, подробнееstrcmp
— сравнивает строки в бинарно-безопасном режиме: как последовательности байтов подробнееstrnatcasecmp
— сравнивает строки без учёта регистра по алгоритму natural order подробнееstrnatcmp
— сравнивает строк алгоритмом natural order подробнееstrncasecmp
— сравнивает первые n символов строк без учёта регистра в бинарно-безопасном режиме подробнееstrncmp
— сравнивает первые n символов строк в бинарно безопасном режиме подробнее
Unique
unique(): Chain
Удалить повторяющиеся значения. Ключи сохраняются.
Ch::from([1,1,2])->unique()->toArray();
// [0 => 1, 2 => 2]
Ссылки
Php.net - array_uniqueunique(): array
Удалить повторяющиеся значения. Ключи сохраняются.
Cf::from([1,1,2])->unique();
// [0 => 1, 2 => 2]
Ссылки
Php.net - array_uniqueunique(array $arr): array
Удалить повторяющиеся значения. Ключи сохраняются.
Func::unique([1,1,2])
// [0 => 1, 2 => 2]
Ссылки
Php.net - array_uniqueUnique by
by(callable $callback): Chain
Удалить повторяющиеся элементы на основе возвращаемых функцией $callback
значений. Ключи сохраняются.
$first = new stdClass();
$first->value = 1;
$second = new stdClass();
$second->value = 2;
$third = new stdClass();
$third->value = 1;
$fourth = new stdClass();
$fourth->value = 3;
$arr = ['a' => $first, 'b' => $second, 'c' => $third, 'd' => $fourth];
Ch::from($arr)->unique->by(fn(stdClass $item, string $key) => $item->value)->toArray();
// ['a' => $first, 'b' => $second, 'd' => $fourth],
by(callable $callback): array
Удалить повторяющиеся элементы на основе возвращаемых функцией $callback
значений. Ключи сохраняются.
$first = new stdClass();
$first->value = 1;
$second = new stdClass();
$second->value = 2;
$third = new stdClass();
$third->value = 1;
$fourth = new stdClass();
$fourth->value = 3;
$arr = ['a' => $first, 'b' => $second, 'c' => $third, 'd' => $fourth];
Cf::from($arr)->unique->by(fn(stdClass $item, string $key) => $item->value);
// ['a' => $first, 'b' => $second, 'd' => $fourth],
uniqueBy(array $arr, callable $callback): array
Удалить повторяющиеся элементы на основе возвращаемых функцией $callback
значений. Ключи сохраняются.
$first = new stdClass();
$first->value = 1;
$second = new stdClass();
$second->value = 2;
$third = new stdClass();
$third->value = 1;
$fourth = new stdClass();
$fourth->value = 3;
$arr = ['a' => $first, 'b' => $second, 'c' => $third, 'd' => $fourth];
Func::uniqueBy($arr, fn(stdClass $item, string $key) => $item->value);
// ['a' => $first, 'b' => $second, 'd' => $fourth],
Values
values(): Chain
Оставить только значения массива.
Ch::from(['a' => 1, 'b' => 2, 'c' => 3])->values()->toArray()
// [1, 2, 3]
Ссылки
Php.net - array_valuesvalues(): array
Возвращает только значения массива.
Cf::from(['a' => 1, 'b' => 2, 'c' => 3])->values()
// [1, 2, 3]
Ссылки
Php.net - array_valuesvalues(array $arr): array
Возвращает значения массива.
Func::values(['a' => 1, 'b' => 2, 'c' => 3])
// [1, 2, 3]