承接 kuaukutsu/ds-collection 相关项目开发

从需求分析到上线部署,全程专人跟进,保证项目质量与交付效率

邮箱:yvsm@zunyunkeji.com | QQ:316430983 | 微信:yvsm316

kuaukutsu/ds-collection

最新稳定版本:2.1.5

Composer 安装命令:

composer require kuaukutsu/ds-collection

包简介

Is the abstract layer which covers functionality the data structure Collection.

README 文档

README

Коллекция объектов.

PHP Version Require Latest Stable Version License Psalm Level Psalm Type Coverage

Tech Stack

kuaukutsu/ds-collection is built on the following main stack:

Примеры

$collection = new DtoCollection();
$collection->attach(new Dto(1, 'first'));
$collection->attach(new Dto(2, 'second'));

$collectionOther = new DtoCollection();
$collectionOther->attach(new Dto(3, 'third'));
$collectionOther->attach(new Dto(4, 'fourth'));

$collection->merge($collectionOther);

Фильтрация

$collection = new DtoCollection();
$collection->attach(new Dto(1, 'first'));
$collection->attach(new Dto(2, 'second'));
$collection->attach(new Dto(3, 'first'));
$collection->attach(new Dto(4, 'second'));

$collectionByFiltered = $collection->filter(
    static fn(Dto $dto): bool => $dto->name === 'first'
);

Сортировка

$collection = new DtoCollection();
$collection->attach(new Dto(1, 'first'));
$collection->attach(new Dto(2, 'second'));
$collection->attach(new Dto(3, 'first'));
$collection->attach(new Dto(4, 'second'));

$sortCollection = $collection->sort(
    static fn(Dto $a, Dto $b): int => strcmp($a->name, $b->name)
);

Индексация

В классе коллекции необходимо указать на основании какого свойства объекта индексировать коллекцию. Это делается при помощи метода indexBy, например:

/**
 * @param Dto $item
 * @return int
 */
protected function indexBy($item): int
{
    return $item->id;
}
/**
 * @param Dto $item
 * @return string
 */
protected function indexBy($item): string
{
    return $item->name;
}

Это позволяет получить быстрый доступ к объекту по ключу индекса, например для indexBy по ключу name:

$collection = new DtoCollection();
$collection->attach(new Dto(1, 'first'));
$collection->attach(new Dto(2, 'second'));

$dto = $collection->get('second');

Составные ключи

Ключ индексирования может быть составным, например:

/**
 * @param Dto $item
 * @return array<scalar>
 */
protected function indexBy($item): array
{
    return [$item->id, $item->name];
}
$collection = new DtoCollection();
$collection->attach(new Dto(1, 'first'));
$collection->attach(new Dto(2, 'second'));
$collection->attach(new Dto(22, 'second'));

$dto = $collection->get(2, 'second');

Testing

Unit testing

The package is tested with PHPUnit. To run tests:

make phpunit
PHP_VERSION=8.1 make phpunit

Static analysis

The code is statically analyzed with Psalm. To run static analysis:

make psalm
PHP_VERSION=8.1 make psalm
make phpstan
PHP_VERSION=8.4 make phpstan

Code Sniffer

make phpcs

Rector

make rector

统计信息

  • 总下载量: 42.81k
  • 月度下载量: 0
  • 日度下载量: 0
  • 收藏数: 0
  • 点击次数: 1
  • 依赖项目数: 2
  • 推荐数: 0

GitHub 信息

  • Stars: 0
  • Watchers: 1
  • Forks: 0
  • 开发语言: PHP

其他信息

  • 授权协议: MIT
  • 更新时间: 2021-11-21