PHPackages                             fi1a/collection - PHPackages - PHPackages  [Skip to content](#main-content)[PHPackages](/)[Directory](/)[Categories](/categories)[Trending](/trending)[Leaderboard](/leaderboard)[Changelog](/changelog)[Analyze](/analyze)[Collections](/collections)[Log in](/login)[Sign up](/register)

1. [Directory](/)
2. /
3. [Utility &amp; Helpers](/categories/utility)
4. /
5. fi1a/collection

ActiveLibrary[Utility &amp; Helpers](/categories/utility)

fi1a/collection
===============

Структуры данных и коллекции в PHP

2.0.7(3y ago)118.0k↓15.3%9MITPHPPHP ^7.3 || ^8

Since Sep 6Pushed 3y ago1 watchersCompare

[ Source](https://github.com/fi1a/collection)[ Packagist](https://packagist.org/packages/fi1a/collection)[ Docs](https://github.com/fi1a/collection)[ RSS](/packages/fi1a-collection/feed)WikiDiscussions master Synced 2d ago

READMEChangelog (10)Dependencies (5)Versions (29)Used By (9)

Структуры данных и коллекции в PHP
==================================

[](#структуры-данных-и-коллекции-в-php)

[![Latest Version](https://camo.githubusercontent.com/58db2b138e274d71e2fdfb9709ac4f643a9a3f06a052627b4e8c91cdbcedb2c6/68747470733a2f2f696d672e736869656c64732e696f2f7061636b61676973742f762f666931612f636f6c6c656374696f6e3f6c6162656c3d72656c65617365)](https://packagist.org/packages/fi1a/collection)[![Software License](https://camo.githubusercontent.com/9bfc7db9d9f7611608eaa929300d83054e5bca32f9a53d30e8a22c26223e5900/68747470733a2f2f696d672e736869656c64732e696f2f6769746875622f6c6963656e73652f666931612f636f6c6c656374696f6e3f7374796c653d666c61742d737175617265)](https://github.com/fi1a/collection/blob/master/LICENSE)[![PHP Version](https://camo.githubusercontent.com/0fc68789953af5978ae3eeb4ee747298455d08e804060c1c5851a8347d831dbd/68747470733a2f2f696d672e736869656c64732e696f2f7061636b61676973742f7068702d762f666931612f636f6c6c656374696f6e3f7374796c653d666c61742d737175617265)](https://php.net)[![Coverage Status](https://camo.githubusercontent.com/0c967d746eb7f4fe28065a3b94d23faa207cd6f4a968535b20fce0310a87cf89/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f636f7665726167652d3130302532352d677265656e)](https://camo.githubusercontent.com/0c967d746eb7f4fe28065a3b94d23faa207cd6f4a968535b20fce0310a87cf89/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f636f7665726167652d3130302532352d677265656e)[![Total Downloads](https://camo.githubusercontent.com/cd562b53f9b747edc19849bddb5e8d51ffbf60adc0660f6c091f0a5048e95a25/68747470733a2f2f696d672e736869656c64732e696f2f7061636b61676973742f64742f666931612f636f6c6c656374696f6e2e7376673f7374796c653d666c61742d73717561726526636f6c6f72423d6d656469756d76696f6c6574726564)](https://packagist.org/packages/fi1a/collection)[![Support mail](https://camo.githubusercontent.com/116fa0d447870a3a6c6c1f4b296c889707a6e30a69c2b28cbe8d0f6f5c3d4920/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f6d61696c2d737570706f7274253430666931612e72752d627269676874677265656e)](mailto:support@fi1a.ru)

Пакет fi1a/collection предоставляет классы структур данных и коллекций.

Установка
---------

[](#установка)

Установить этот пакет можно как зависимость, используя Composer.

```
composer require fi1a/collection
```

Использование
-------------

[](#использование)

### Типы данных

[](#типы-данных)

#### Объект Fi1a\\Collection\\DataType\\ArrayObject, работающий также как и массив

[](#объект-fi1acollectiondatatypearrayobject-работающий-также-как-и-массив)

Реализует интерфейс `Fi1a\Collection\DataType\ValueObjectInterface`.

```
use Fi1a\Collection\DataType\ArrayObject;

$arrayObject = new ArrayObject(['foo', 'bar', 'baz',]);

foreach ($arrayObject as $value) {
    $value; // 'foo', 'bar', 'baz'
}

count($arrayObject); // 3
```

#### Объект Fi1a\\Collection\\DataType\\MapArrayObject, работающий также как и массив

[](#объект-fi1acollectiondatatypemaparrayobject-работающий-также-как-и-массив)

Реализует интерфейс `Fi1a\Collection\DataType\MapArrayObjectInterface` с методами расширяющими использование массивов.

```
use Fi1a\Collection\DataType\MapArrayObject;

$arrayObject = new MapArrayObject();

$arrayObject->add('foo');
$arrayObject->add('bar');
$arrayObject->add('baz');

foreach ($arrayObject as $value) {
    $value; // 'foo', 'bar', 'baz'
}

$arrayObject->count(); // 3
```

Доступные методы:

МетодОписаниеisEmpty(): boolОпределяет пустой массив или нетfirst()Возвращает первый элементlast()Возвращает последний элементclear()Очистить массив значенийhasValue($value): boolПроверяет, присутствует ли в массиве указанное значениеkeys()Возвращает ключи массиваhas($key)Есть ли элемент с таким ключемget($key, $default = null)Возвращает элемент по ключуset($key, $value)Устанавливает значение по ключуdelete($key)Удаляет элемент по ключу, возвращает удаленное значениеdeleteIf($key, $value): boolУдаляет элемент по ключу, если значение равно переданному. Если элемент удален, возвращает true.put($key, $value)Устанавливает значение по ключу, если значение уже есть в массиве, возвращает егоputIfAbsent($key, $value)Устанавливает значение по ключу, если его нет. Возвращает предыдущее значениеreplace($key, $value)Заменяет значение элемента по ключу, только если есть значение. Возвращает предыдущее значениеreplaceIf($key, $oldValue, $newValue): boolЗаменяет значение элемента по ключу, только если текущее значение равно $oldValue. Если элемент заменен, возвращает true.add($value)Добавить в коллекцию значениеeach(callable $callback)Вызывает функцию, передавая ключ и значение из коллекцииmap(callable $callback)Вызывает функцию, передавая ключ и значение из коллекции и заменяет элемент результатомcolumn(string $name): arrayВозвращает значения переданного ключа, свойства или методаsort(string $name, string $order = self::SORT\_ASC)Сортировка элементов коллекции по значениям переданного ключа, свойства или методаfilter(callable $callback)Возвращает отфильтрованную коллекциюwhere(string $name, $value)Возвразает коллекцию с элементами у которых значение ключа, свойства или метода равно переданному значениюdiff($collection)Возвращает новую коллекцию с расходящимися элементами текущей коллекции с переданнойintersect($collection)Возвращает новую коллекцию с пересечением элементов текущей коллекции с переданнойmerge($collection)Объединяет элементы текущей коллекции с элементами переданной и возвращает новую коллекциюresetKeys()Сбросить ключи коллекцииreduce(callable $callback, $initial = null)Итеративно уменьшает коллекцию к единственному значению, используя callback-функциюreduceRight(callable $callback, $initial = null)Итеративно уменьшает коллекцию к единственному значению в обратном порядке, используя callback-функциюwraps(string $prefix, ?string $suffix = null)Оборачивает значения и возвращает новую коллекциюjoin(string $separator): stringОбъединяет элементы в строкуinsert(int $index, array $values)Вставить значенияfirstKey()Возвращает ключ первого элементаlastKey()Возвращает ключ последнего элементаtoggleValue($key, $firstValue, $secondValue)Переключает значенияevery(callable $condition): boolВозвращает true, если все элементы удовлетворяют условиюwithout(callable $condition)Возвращает коллекцию без элементов удовлетворяющих условиюwith(callable $condition)Возвращает коллекцию с элементами удовлетворяющими условиюdrop(int $count)Возвращает коллекцию, опуская заданное количество элементов с началаdropRight(int $count)Возвращает коллекцию, опуская заданное количество элементов с концаfindValue(callable $condition)Возвращает первый элемент, который удовлетворяет условию $condition, возвращает false, если такого элемента не существуетfindLastValue(callable $condition)Возвращает последний элемент, который удовлетворяет условию $condition, возвращает false, если такого элемента не существуетfindKey(callable $condition)Возвращает первый ключ элемента, который удовлетворяет условию $condition, возвращает false, если такого элемента не существуетfindLastKey(callable $condition)Возвращает последний ключ элемента, который удовлетворяет условию $condition, возвращает false, если такого элемента не существуетmapAndColumn($map, $column = null)Возвращает новый массив с переданным ключем и колонкой#### Fi1a\\Collection\\DataType\\PathAccess класс реализует доступ по пути к значениям

[](#fi1acollectiondatatypepathaccess-класс-реализует-доступ-по-пути-к-значениям)

Реализует интерфейс `Fi1a\Collection\DataType\PathAccessInterface`. Данный класс позволяет получать доступ к ключам массива по пути (foo:bar:baz).

```
use Fi1a\Collection\DataType\PathAccess;

$register = new PathAccess(['foo' => ['bar' => ['baz' => 1], 'qux' => 2,],]);

$register->get('foo:bar:baz'); // 1
$register->get('foo:qux'); // 2

$register->has('foo:bar'); // true
$register->has('foo:bar:baz'); // true
$register->has('foo:bar:baz:bat'); // false
```

#### Объект-значение Fi1a\\Collection\\DataType\\ValueObject с методами set/get

[](#объект-значение-fi1acollectiondatatypevalueobject-с-методами-setget)

Реализует интерфейс `Fi1a\Collection\DataType\ValueObjectInterface`. Предоставляет возможность задать set/get методы для значений и работает также как и массив.

```
use Fi1a\Collection\DataType\ValueObject;

class Foo extends ValueObject
{
    public function getBar(): string
    {
        return (string) $this->modelGet('bar');
    }

    public function setBar(string $bar): self
    {
        $this->modelSet('bar', $bar . 'baz');

        return $this;
    }
}

$valueObject = new Foo();

$valueObject['bar'] = 'bar';

isset($valueObject['bar']); // true
$valueObject['bar']; // 'barbaz'
$valueObject->getBar(); // 'barbaz'
```

### Хелперы

[](#хелперы)

#### Хелпер Fi1a\\Collection\\Helpers\\ArrayHelper

[](#хелпер-fi1acollectionhelpersarrayhelper)

Содержит вспомогательные методы для работы с массивом.

МетодОписаниеisEmpty(array $array): boolОпределяет пустой массив или нетfirst(array $array)Возвращает первый элементlast(array $array)Возвращает последний элементhasValue(array $array, $value, bool $strict = true): boolПроверяет, присутствует ли в массиве указанное значениеkeys(array $array): arrayВозвращает ключи массиваhas(array $array, $key): boolЕсть ли элемент с таким ключемget(array $array, $key, $default = null)Возвращает элемент по ключуset(array $array, $key, $value): arrayУстанавливает значение по ключуdelete(array &amp;$array, $key)Удаляет элемент по ключу, возвращает удаленное значениеdeleteIf(array &amp;$array, $key, $value): boolУдаляет элемент по ключу, если значение равно переданному. Если элемент удален, возвращает true.put(array &amp;$array, $key, $value)Устанавливает значение по ключу, если значение уже есть в массиве, возвращает егоputIfAbsent(array &amp;$array, $key, $value)Устанавливает значение по ключу, если его нет. Возвращает предыдущее значениеreplace(array &amp;$array, $key, $value)Заменяет значение элемента по ключу, только если есть значение. Возвращает предыдущее значениеreplaceIf(array &amp;$array, $key, $oldValue, $newValue): boolЗаменяет значение элемента по ключу, только если текущее значение равно $oldValue. Если элемент заменен, возвращает true.each(array $array, callable $callback): voidВызывает функцию, передавая ключ и значение из коллекцииmap(array $array, callable $callback): arrayВызывает функцию, передавая ключ и значение из коллекции и заменяет элемент результатомcolumn(array $array, string $name): arrayВозвращает значения переданного ключа, свойства или методаsort(array $array, string $name, string $order = self::SORT\_ASC): arrayСортировка элементов коллекции по значениям переданного ключа, свойства или методаfilter(array $array, callable $callback): arrayВозвращает отфильтрованную коллекциюwhere(array $array, string $name, $value): arrayВозвразает коллекцию с элементами у которых значение ключа, свойства или метода равно переданному значениюdiff(array $array, array $collection): arrayВозвращает новую коллекцию с расходящимися элементами текущей коллекции с переданнойintersect(array $array, array $collection): arrayВозвращает новую коллекцию с пересечением элементов текущей коллекции с переданнойresetKeys(array $array): arrayСбросить ключиreduce(array $array, callable $callback, $initial = null)Итеративно уменьшает коллекцию к единственному значению, используя callback-функциюreduceRight(array $array, callable $callback, $initial = null)Итеративно уменьшает коллекцию к единственному значению в обратном порядке, используя callback-функциюwraps(array $array, string $prefix, ?string $suffix = null): arrayОборачивает значенияjoin(array $array, string $separator): stringОбъединяет элементы в строкуinsert(array $array, int $index, array $values): arrayВставить значенияfirstKey(array $array)Возвращает ключ первого элементаlastKey(array $array)Возвращает ключ последнего элементаtoggleValue(array $array, $key, $firstValue, $secondValue): arrayПереключает значенияevery(array $array, callable $condition): boolВозвращает true, если все элементы удовлетворяют условиюwithout(array $array, callable $condition): arrayВозвращает массив без элементов удовлетворяющих условиюwith(array $array, callable $condition): arrayВозвращает массив с элементами удовлетворяющими условиюdrop(array $array, int $count): arrayВозвращает массив, опуская заданное количество элементов с началаdropRight(array $array, int $count): arrayВозвращает массив, опуская заданное количество элементов с концаfindValue(array $array, callable $condition)Возвращает первый элемент, который удовлетворяет условию $condition, возвращает false, если такого элемента не существуетfindLastValue(array $array, callable $condition)Возвращает последний элемент, который удовлетворяет условию $condition, возвращает false, если такого элемента не существуетfindKey(array $array, callable $condition)Возвращает первый ключ элемента, который удовлетворяет условию $condition, возвращает false, если такого элемента не существуетfindLastKey(array $array, callable $condition)Возвращает последний ключ элемента, который удовлетворяет условию $condition, возвращает false, если такого элемента не существуетmapAndColumn(array $array, $map, $column = null): arrayВозвращает новый массив с переданным ключем и колонкой### Коллекции

[](#коллекции)

#### Коллекция значений Fi1a\\Collection\\Collection

[](#коллекция-значений-fi1acollectioncollection)

Реализует интерфейс `Fi1a\Collection\CollectionInterface`.

Возможные типы значений:

- mixed
- array
- boolean, bool
- callable
- int, integer
- float, double
- numeric
- string
- resource
- scalar
- object
- название класса

```
use Fi1a\Collection\Collection;

$collection = new Collection('string');

$collection[] = 'foo';
$collection->add('bar');

foreach ($collection as $item) {
    $item; // 'foo', 'bar'
}

count($collection); // 2

$collection->has(0); // true
$collection->has(1); // true
$collection->has(2); // false
```

#### Коллекции экземпляров классов

[](#коллекции-экземпляров-классов)

Реализует интерфейс `Fi1a\Collection\InstanceCollectionInterface`.

```
use Fi1a\Collection\AbstractInstanceCollection;

class Foo
{
    private $value = null;

    public function __construct(string $value)
    {
        $this->value = $value;
    }

    public function getValue()
    {
        return $this->value;
    }
}

class FooCollection extends AbstractInstanceCollection
{
    public static function factory($key, $value)
    {
        return new Foo((string) $value);
    }

    public static function isInstance($value): bool
    {
        return $value instanceof Foo;
    }
}

$collection = new FooCollection(['bar',]);
$collection[] = 'baz';
$collection[] = new Foo('qux');

foreach ($collection as $foo) {
    $foo->getValue(); // 'bar', 'baz', 'qux'
}
```

#### Коллекция экземпляров классов Fi1a\\Collection\\DataType\\ArrayObject

[](#коллекция-экземпляров-классов-fi1acollectiondatatypearrayobject)

Частная реализация коллекции `Fi1a\Collection\AbstractInstanceCollection` для классов `Fi1a\Collection\DataType\ArrayObject`.

```
use Fi1a\Collection\ArrayObjectCollection;
use Fi1a\Collection\DataType\ArrayObject;

$collection = new ArrayObjectCollection([['foo',],]);
$collection[] = ['bar',];
$collection[] = new ArrayObject(['baz',]);

foreach ($collection as $item) {
    $item[0]; // 'foo', 'bar', 'baz'
}

count($collection); // 3
```

#### Коллекция экземпляров классов Fi1a\\Collection\\DataType\\MapArrayObject

[](#коллекция-экземпляров-классов-fi1acollectiondatatypemaparrayobject)

Частная реализация коллекции `Fi1a\Collection\AbstractInstanceCollection` для классов `Fi1a\Collection\DataType\MapArrayObject`.

```
use Fi1a\Collection\MapArrayObjectCollection;
use Fi1a\Collection\DataType\MapArrayObject;

$collection = new MapArrayObjectCollection([['foo',],]);
$collection[] = ['bar',];
$collection[] = new MapArrayObject(['baz',]);

foreach ($collection as $item) {
    $item->first(); // 'foo', 'bar', 'baz'
}

$collection->count(); // 3
```

#### Коллекция экземпляров классов Fi1a\\Collection\\DataType\\PathAccess

[](#коллекция-экземпляров-классов-fi1acollectiondatatypepathaccess)

Частная реализация коллекции `Fi1a\Collection\AbstractInstanceCollection` для классов `Fi1a\Collection\DataType\PathAccess`.

```
use Fi1a\Collection\PathAccessCollection;
use Fi1a\Collection\DataType\PathAccess;

$collection = new PathAccessCollection([['foo' => ['bar' => 1,],],]);
$collection[] = ['foo' => ['bar' => 2,],];
$collection[] = new PathAccess(['foo' => ['bar' => 3,],]);

foreach ($collection as $item) {
    $item->get('foo:bar'); // 1, 2, 3
}

count($collection); // 3
```

#### Очередь Fi1a\\Collection\\Queue

[](#очередь-fi1acollectionqueue)

Коллекция реализующая двунаправленную очередь упорядоченных элементов.

```
use Fi1a\Collection\Queue;

$queue = new Queue();
$queue->addBegin(1); // true
$queue->addBegin(2); // true
$queue->pollEnd(); // 1
$queue->pollEnd(); // 2
$queue->pollEnd(); // null
$queue->addBegin(3); // true
$queue->pollEnd(); // 3
$queue->pollEnd(); // null
```

#### Очередь с типизацией значений Fi1a\\Collection\\TypedValueQueue

[](#очередь-с-типизацией-значений-fi1acollectiontypedvaluequeue)

Коллекция реализующая двунаправленную очередь упорядоченных элементов с проверкой типов значений.

Возможные типы значений:

- mixed
- array
- boolean, bool
- callable
- int, integer
- float, double
- numeric
- string
- resource
- scalar
- object
- название класса

Пример, в качестве типа boolean:

```
use Fi1a\Collection\TypedValueQueue;
use Fi1a\Collection\Exception\InvalidArgumentException;

$queue = new TypedValueQueue('boolean');
$queue->addBegin(true); // true
$queue->count(); // 1
$queue->addBegin(false); // true
$queue->count(); // 2
try {
    $queue->addBegin(10); // throw InvalidArgumentException
} catch (InvalidArgumentException $exception) {

}
```

Пример, в качестве типа класс:

```
use Fi1a\Collection\TypedValueQueue;
use Fi1a\Collection\Exception\InvalidArgumentException;

$queue = new TypedValueQueue(\stdClass::class);
$queue->addBegin(new \stdClass()); // true
try {
    $queue->addBegin(10); // throw InvalidArgumentException
} catch (InvalidArgumentException $exception) {

}
```

###  Health Score

33

—

LowBetter than 72% of packages

Maintenance20

Infrequent updates — may be unmaintained

Popularity27

Limited adoption so far

Community12

Small or concentrated contributor base

Maturity60

Established project with proven stability

How is this calculated?**Maintenance (25%)** — Last commit recency, latest release date, and issue-to-star ratio. Uses a 2-year decay window.

**Popularity (30%)** — Total and monthly downloads, GitHub stars, and forks. Logarithmic scaling prevents top-heavy scores.

**Community (15%)** — Contributors, dependents, forks, watchers, and maintainers. Measures real ecosystem engagement.

**Maturity (30%)** — Project age, version count, PHP version support, and release stability.

###  Release Activity

Cadence

Every ~33 days

Recently: every ~14 days

Total

28

Last Release

1229d ago

Major Versions

1.3.x-dev → 2.0.02022-12-04

PHP version history (3 changes)1.0.0PHP ^7.3

1.1.0PHP ^7.3 || ^8.0

1.2.0PHP ^7.3 || ^8

### Community

Maintainers

![](https://www.gravatar.com/avatar/d4f26c1adaa632741fadf55b1328cbd22ac91282aecfae2027d105df0ddedee4?d=identicon)[fi1a](/maintainers/fi1a)

---

Tags

arraycollectionphp

###  Code Quality

TestsPHPUnit

Static AnalysisPsalm

Code StylePHP\_CodeSniffer

Type Coverage Yes

### Embed Badge

![Health badge](/badges/fi1a-collection/health.svg)

```
[![Health](https://phpackages.com/badges/fi1a-collection/health.svg)](https://phpackages.com/packages/fi1a-collection)
```

###  Alternatives

[getdkan/dkan

DKAN Open Data Catalog

387138.7k2](/packages/getdkan-dkan)[fof/analytics

Tracks analytics using Google Analytics, Google Optimize/GTM and Matomo

3546.1k](/packages/fof-analytics)[searchturbine/phpwee-php-minifier

A PHP minifier for HTML, CSS and JS files.

832.5k1](/packages/searchturbine-phpwee-php-minifier)[vova07/yii2-start-comments-module

The comments module for Yii2-Start application.

149.5k1](/packages/vova07-yii2-start-comments-module)[sy-records/baidu-textcensor

baidu textcensor

151.4k1](/packages/sy-records-baidu-textcensor)[simialbi/yii2-kanban

Kanban board module for yii2

111.1k1](/packages/simialbi-yii2-kanban)

PHPackages © 2026

[Directory](/)[Categories](/categories)[Trending](/trending)[Changelog](/changelog)[Analyze](/analyze)
