atournayre/collection
Type-safe PHP collections with list/map factories, plus immutable variants. Includes DecimalValue collections with consistent precision handling. Build domain-specific collections by extending TypedCollection to enforce item types and safe manipulation.
This library provides a way to manipulate collections.
Use Composer to install the package:
composer require atournayre/collection
| Method | Description |
|---|---|
TypedCollection::createAsList() |
Create a list from an array |
TypedCollection::createAsMap() |
Create a map from an array |
TypedCollectionImmutable::createAsList() |
Create an immutable list from an array |
TypedCollectionImmutable::createAsMap() |
Create an immutable map from an array |
DecimalValueCollection::fromArray() |
Create a collection of DecimalValue from an array |
DecimalValuePrecisionConsistentCollection::fromArray() |
Create a collection of DecimalValue with precision consistent from an array |
// Samples classes
class Person
{
public function __construct(
public string $name
) {}
}
class People extends TypedCollection
{
protected static string $type = Person::class;
}
// Create collection
$collection = People::createAsList([
new Person('John'),
]);
$collection[] = new Person('Jack'); // Add item
// Samples classes
class Person
{
public function __construct(
public string $name
) {}
}
class People extends TypedCollectionImmutable
{
protected static string $type = Person::class;
}
// Create collection
$collection = People::createAsList([
new Person('John'),
]);
$collection[] = new Person('Jack'); // Throws a RuntimeException
$collection = DecimalValueCollection::fromArray([
DecimalValue::create(4.235, 3),
DecimalValue::fromInt(1),
DecimalValue::fromString('2'),
DecimalValue::fromFloat(3.01, 2),
], 2);
$collection[0]->toFloat(); // 4.24
$collection[1]->toFloat(); // 1.00
$collection[2]->toFloat(); // 2.00
$collection[3]->toFloat(); // 3.01
Contributions to the package are always welcome!
All contents of this package are licensed under the MIT license.
How can I help you explore Laravel packages today?