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

Chain
ChainFunc
Func
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

Chain
ChainFunc
Func
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

Chain
ChainFunc
Func
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

Chain
ChainFunc
Func
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

Chain
ChainFunc
Func
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

Chain
ChainFunc
Func
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],
// ]
bySize(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],
// ]
chunkBySize(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],
// ]

Clear

Chain
ChainFunc
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

Chain
ChainFunc
Func
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

Chain
ChainFunc
Func
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

Chain
ChainFunc
Func
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

Chain
ChainFunc
Func
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

Chain
ChainFunc
Func
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

Chain
ChainFunc
Func
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

Chain
ChainFunc
Func
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'];

Flatten

Chain
ChainFunc
Func
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

Chain
ChainFunc
Func
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

Chain
ChainFunc
Func
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

Chain
ChainFunc
Func
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

Chain
ChainFunc
Func
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

Chain
ChainFunc
Func
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

Chain
ChainFunc
Func
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

Chain
ChainFunc
Func
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

Chain
ChainFunc
Func
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

Chain
ChainFunc
Func
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

Chain
ChainFunc
Func
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

Chain
ChainFunc
Func
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

Chain
ChainFunc
Func
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

Chain
ChainFunc
Func
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

Chain
ChainFunc
Func
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

Chain
ChainFunc
Func
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

Chain
ChainFunc
Func
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

Chain
ChainFunc
Func
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

Chain
ChainFunc
Func
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

Chain
ChainFunc
Func
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

Is none

Chain
ChainFunc
Func
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

Chain
ChainFunc
Func
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

Chain
ChainFunc
Func
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

Chain
ChainFunc
Func
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

Chain
ChainFunc
Func
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

Chain
ChainFunc
Func
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

Chain
ChainFunc
Func
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

Chain
ChainFunc
Func
keys(): Chain

Возвращает массив ключей.

Ch::from(['a' => 1, 'b' => 2, 'c' => 3])->keys()->toArray();
// ['a', 'b', 'c']
keys(): array

Возвращает массив ключей.

Cf::from(['a' => 1, 'b' => 2, 'c' => 3])->keys();
// ['a', 'b', 'c']
keys(array $arr): array

Возвращает массив ключей.

Func::keys(['a' => 1, 'b' => 2, 'c' => 3]);
// ['a', 'b', 'c']

Keys from field

Chain
ChainFunc
Func
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

Chain
ChainFunc
Func
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

Chain
ChainFunc
Func
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

Chain
ChainFunc
Func
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

Chain
ChainFunc
Func
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

Chain
ChainFunc
Func
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

Chain
ChainFunc
Func
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

Chain
ChainFunc
Func
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

Chain
ChainFunc
Func
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

Chain
ChainFunc
Func
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

Chain
ChainFunc
Func
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

Chain
ChainFunc
Func
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]
map(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]
map(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]

Outer

Outer check

Chain
check(callable $callback): Chain

Выполнить действие с массивом целиком без его изменения (например, для точки остановки в дебагере).

Параметр callback - функции - $array

Outer change

Chain
change(callable $callback): Chain

Изменить массив целиком.

Параметр callback - функции - $array

Outer is

Chain
is(callable $callback): bool

Проверить логическое условие ко всему массиву.

Параметр callback - функции - $array

Outer print

Chain
print(): Chain

Вывести массив через print_r (с тегами pre)

Outer replace with

Chain
replaceWith(array $arr): Chain

Заменить массив целиком

$ch = Chain::from([1,2])
$ch->toArray()
// [1,2]
$ch->outer->replaceWith([3,4])->toArray()
// [3,4]

Pad

Chain
ChainFunc
Func
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]
pad(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]
pad(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]

Pop

Chain
ChainFunc
Func
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],
//   ]
// ],
pop(): 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],
//   ]
// ],
pop(array $arr): mixed|null

Извлекает и возвращает последнее значение массива array, сокращает массив array на один элемент.

Функция возвращает извлечённое значение или null, если массив array оказался пустым.

$arr = [1, 2, 3];
Func::pop($arr);
// 3

$arr;
// [1, 2]

Prepend

Chain
ChainFunc
Func
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

Chain
ChainFunc
Func
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

Chain
ChainFunc
Func
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

Chain
ChainFunc
Func
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

Chain
ChainFunc
Func
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

Chain
ChainFunc
Func
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

Chain
ChainFunc
Func
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

Chain
ChainFunc
Func
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

Chain
ChainFunc
Func
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

Chain
ChainFunc
Func
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]
reverse(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]
reverse(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]

Replace

Chain
ChainFunc
Func
replace(array ...$replacement): Chain

Заменяет элементы массива элементами других массивов.

Ch::from([1, 2, 3, 4, 5])->replace([6, 7], [4 => 8])->toArray();
// [6, 7, 3, 4, 8];
replace(array ...$replacement): array

Заменяет элементы массива элементами других массивов.

Cf::from([1, 2, 3, 4, 5])->replace([6, 7], [4 => 8]);
// [6, 7, 3, 4, 8];
replace(array $array, array ...$replacements): array

Заменяет элементы массива элементами других массивов.

$arr = [1, 2, 3, 4, 5];

Func::replace($arr, [6, 7], [4 => 8]);
// [6, 7, 3, 4, 8];

Replace recursive

Chain
ChainFunc
Func
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

Chain
ChainFunc
Func
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],
//   ]
// ],
shift(): 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],
//   ]
// ],
shift(array $arr): mixed|null

Извлекает и возвращает первое значение массива array, сокращает массив array на один элемент и сдвигает остальные элементы в начало. Числовые ключи массива изменятся так, чтобы нумерация начиналась с нуля, тогда как литеральные ключи не изменятся.

Функция возвращает извлечённое значение или null, если массив array оказался пустым.

$arr = [1, 2, 3];

Func::shift($arr);
// 1

$arr;
// [2, 3]

Slice

Chain
ChainFunc
Func
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]
slice(): 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]
slice(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]

Slice head

Chain
ChainFunc
Func
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

Chain
ChainFunc
Func
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

Chain
ChainFunc
Func
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],
//   ]
// ]
splice(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],
//   ]
// ]
splice(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]

Splice head

Chain
ChainFunc
Func
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

Chain
ChainFunc
Func
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

Chain
ChainFunc
Func
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

Chain
ChainFunc
Func
unique(): Chain

Удалить повторяющиеся значения. Ключи сохраняются.

Ch::from([1,1,2])->unique()->toArray();
// [0 => 1, 2 => 2]
unique(): array

Удалить повторяющиеся значения. Ключи сохраняются.

Cf::from([1,1,2])->unique();
// [0 => 1, 2 => 2]
unique(array $arr): array

Удалить повторяющиеся значения. Ключи сохраняются.

Func::unique([1,1,2])
// [0 => 1, 2 => 2]

Unique by

Chain
ChainFunc
Func
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

Chain
ChainFunc
Func
values(): Chain

Оставить только значения массива.

Ch::from(['a' => 1, 'b' => 2, 'c' => 3])->values()->toArray()
// [1, 2, 3]
values(): array

Возвращает только значения массива.

Cf::from(['a' => 1, 'b' => 2, 'c' => 3])->values()
// [1, 2, 3]
values(array $arr): array

Возвращает значения массива.

Func::values(['a' => 1, 'b' => 2, 'c' => 3])
// [1, 2, 3]