event4u / data-helpers
Framework-agnostic PHP library for data mapping, DTOs and utilities. Includes DataMapper, SimpleDto/LiteDto, DataAccessor/Mutator/Filter and helper classes (MathHelper, EnvHelper, etc.). Works with Laravel, Symfony/Doctrine or standalone PHP.
Fund package maintenance!
event4u-app
matze4u
Installs: 793
Dependents: 0
Suggesters: 0
Security: 0
Stars: 12
Watchers: 0
Forks: 0
Open Issues: 0
pkg:composer/event4u/data-helpers
Requires
- php: ^8.2
- composer-plugin-api: ^2.0
- ext-simplexml: *
Requires (Dev)
- composer/composer: ^2.0
- doctrine/collections: ^2.0|^3.0
- doctrine/orm: ^2.0|^3.0
- ergebnis/phpstan-rules: ^2.12
- fakerphp/faker: ^1.24
- graham-campbell/result-type: ^1.1
- illuminate/cache: ^9.0|^10.0|^11.0
- illuminate/database: ^9.0|^10.0|^11.0
- illuminate/http: ^9.0|^10.0|^11.0
- illuminate/support: ^9.0|^10.0|^11.0
- jangregor/phpstan-prophecy: ^2.2
- nesbot/carbon: ^2.72|^3.0
- pestphp/pest: ^2.0|^3.0
- phpat/phpat: ^0.12.0
- phpbench/phpbench: ^1.4
- phpstan/phpstan: ^2.0
- phpstan/phpstan-mockery: ^2.0
- phpstan/phpstan-phpunit: ^2.0
- rector/rector: ^2.1
- spaze/phpstan-disallowed-calls: ^4.6
- symfony/cache: ^6.0|^7.0
- symfony/config: ^6.0|^7.0
- symfony/dependency-injection: ^6.0|^7.0
- symfony/http-foundation: ^6.0|^7.0
- symfony/http-kernel: ^6.0|^7.0
- symfony/property-access: ^6.0|^7.0
- symfony/property-info: ^6.0|^7.0
- symfony/serializer: ^6.0|^7.0
- symfony/validator: ^6.0|^7.0
- symplify/coding-standard: ^12.4
- symplify/easy-coding-standard: ^12.6
- timeweb/phpstan-enum: ^4.0
- vlucas/phpdotenv: ^5.6
Suggests
- ext-yaml: For YAML serialization support (faster, requires PECL installation)
- nesbot/carbon: Required for EnvHelper::carbon() method to parse date/time environment variables
- symfony/yaml: For YAML serialization support (pure PHP, easier to install)
- dev-main
- 1.22.5
- 1.22.4
- 1.22.3
- 1.22.2
- 1.22.1
- 1.22.0
- 1.21.2
- 1.21.1
- 1.21.0
- 1.20.1
- 1.20.0
- 1.19.0
- 1.18.2
- 1.18.1
- 1.18.0
- 1.17.2
- 1.17.1
- 1.17.0
- 1.16.0
- 1.15.0
- 1.14.0
- 1.13.1
- 1.13.0
- 1.12.0
- 1.11.0
- 1.10.1
- 1.10.0
- 1.9.2
- 1.9.1
- 1.9.0
- 1.8.0
- 1.7.12
- 1.7.11
- 1.7.10
- 1.7.9
- 1.7.8
- 1.7.7
- 1.7.6
- 1.7.5
- 1.7.4
- 1.7.3
- 1.7.2
- 1.7.1
- 1.7.0
- 1.6.0
- 1.5.0
- 1.4.1
- 1.4.0
- 1.3.0
- 1.2.2
- 1.2.1
- 1.2.0
- 1.1.1
- 1.1.0
- 1.0.0
- dev-fix/nullable-default-value
- dev-fix/json-condition-mapping
- dev-refactor/optimize-step2
- dev-refactor/optimize-package
- dev-fix/fillable-bug
- dev-refactor/optimize-dto-model-relation
- dev-feat/add-has-model-dto-attribute
- dev-fix/collection-mapping
- dev-fix/carbon-mapping
- dev-feat/add-type-filter
- dev-fix/dto-file-imprt
- dev-fix/class-mapping-bug
- dev-feat/add-framework-datetime
- dev-feat/add-datetime-support
- dev-fix/existing-attributes
- dev-feat/add-length-attribute
- dev-fix/readonly-mapping
- dev-feat/add-mapper-template-setter-for-dto
- dev-feat/add-map-attribute
- dev-refactor/xml-import-mapping
- dev-fix/doku-files
- dev-feat/add-data-collection
- dev-feat/get-strict-types-by-accessor
- dev-feat/add-serializer-benchmark
- dev-fix/update-from-upstream
- dev-fix/sync-upstream-tags
- dev-feat/sync-upstream-tags
- dev-feat/higlight-package-benefits
- dev-fix/annotations-and-docu
- dev-fix/test-matrix-script
- dev-refactor/scripts
- dev-feat/native-php-configloader
- dev-feat/add-duplicate-testdto-check
- dev-feat/add-to-array-caching
- dev-refactor/class-imports
- dev-feat/better-cache-warmup
- dev-refactor/litedto-becomes-simpledto
- dev-fix/tests
- dev-feat/add-benchmark-updates
This package is auto-updated.
Last update: 2025-12-01 19:45:41 UTC
README
Data Helpers
Framework-agnostic PHP library with deep framework integration โ get the power of framework-specific solutions without the lock-in.
Transform complex data structures, create type-safe DTOs and simplify data operations with expressive syntax. Works standalone in Pure PHP or with deep integration for Laravel and Symfony. Includes DataMapper, SimpleDto/LiteDto, DataAccessor/Mutator/Filter and utility helpers (MathHelper, EnvHelper, etc.).
// From this messy API response... $apiResponse = [ 'data' => [ 'departments' => [ ['users' => [['email' => 'alice@example.com'], ['email' => 'bob@example.com']]], ['users' => [['email' => 'charlie@example.com']]], ], ], ]; // ...to this clean result in a few lines $accessor = new DataAccessor($apiResponse); $emails = $accessor->get('data.departments.*.users.*.email'); // ['alice@example.com', 'bob@example.com', 'charlie@example.com']
๐ฏ Framework-Agnostic + Deep Integration โข Pure PHP with zero dependencies โข Optional Laravel & Symfony integration โข No framework lock-in
๐ Full Documentation โข Getting Started โข API Reference
๐ Support the Development - Help us build better tools for the PHP community
๐ก Why Data Helpers?
๐ฏ Stop Writing Nested Loops
// โ Without Data Helpers $emails = []; foreach ($data['departments'] ?? [] as $dept) { foreach ($dept['users'] ?? [] as $user) { if (isset($user['email'])) { $emails[] = $user['email']; } } } // โ With Data Helpers $emails = $accessor->get('departments.*.users.*.email');
๐ Key Benefits
- ๐ฏ Framework-Agnostic + Deep Integration - Pure PHP with zero dependencies, optional deep Laravel/Symfony integration
- Type-Safe - PHPStan Level 9 compliant with 4700+ tests
- Fast - SimpleDto with #[UltraFast] is up to 12.1x faster than Other Serializer
- Zero Dependencies - No required dependencies, optional framework integrations
- No Framework Lock-In - Use framework features without being tied to a framework
- No-Code Mapping - Store templates in database, create with drag-and-drop editors
๐ฆ Installation
composer require event4u/data-helpers
Requirements: PHP 8.2+
Framework support (all optional):
- ๐ด Laravel 9+ - Collections, Eloquent Models
- โซ Symfony/Doctrine 6+ - Collections, Entities
- ๐ง Standalone PHP - Works out of the box
๐ Installation Guide โข Configuration
๐ Framework Integration
The best of both worlds: Use Data Helpers as a standalone library in pure PHP, or leverage deep framework integration for Laravel and Symfony โ without framework lock-in.
๐ฏ Framework-Agnostic Core
Zero dependencies required. Works out of the box with:
- โ Pure PHP - Arrays, objects, JSON, XML
- โ Any Framework - No framework-specific code required
- โ Portable - Move between frameworks without code changes
// Works everywhere - no framework needed $dto = UserDto::fromArray(['name' => 'John', 'email' => 'john@example.com']); $json = json_encode($dto);
๐ Optional Deep Integration
When you need it: Add framework-specific features without changing your core code.
Laravel Integration (Optional)
// 1. Controller Injection - Automatic validation & filling class UserController extends Controller { public function store(UserDto $dto): JsonResponse { // $dto is automatically validated and filled from request $user = User::create($dto->toArray()); return response()->json($user, 201); } } // 2. Eloquent Model Integration $user = User::find(1); $dto = UserDto::fromModel($user); // From Model $dto->toModel($user); // To Model // 3. Laravel-Specific Attributes class UserProfileDto extends SimpleDto { public function __construct( public readonly string $name, #[WhenAuth] // Only when authenticated public readonly ?string $email = null, #[WhenCan('edit-posts')] // Only with permission public readonly ?string $editUrl = null, #[WhenRole('admin')] // Only for admins public readonly ?array $adminPanel = null, ) {} } // 4. Artisan Commands php artisan make:dto UserDto php artisan dto:typescript php artisan dto:migrate-spatie
Symfony Integration (Optional)
// 1. Controller Injection - Automatic validation & filling class UserController extends AbstractController { #[Route('/users', methods: ['POST'])] public function create(UserDto $dto): JsonResponse { // $dto is automatically validated and filled from request $user = new User(); $dto->toEntity($user); $this->entityManager->persist($user); $this->entityManager->flush(); return $this->json($user, 201); } } // 2. Doctrine Entity Integration $user = $this->entityManager->find(User::class, 1); $dto = UserDto::fromEntity($user); // From Entity $dto->toEntity($user); // To Entity // 3. Symfony-Specific Attributes class UserProfileDto extends SimpleDto { public function __construct( public readonly string $name, #[WhenGranted('ROLE_ADMIN')] // Only with permission public readonly ?string $email = null, #[WhenSymfonyRole('ROLE_MODERATOR')] // Only for moderators public readonly ?array $moderationPanel = null, ) {} } // 4. Console Commands php bin/console make:dto UserDto php bin/console dto:typescript
๐ก Key Integration Features
| Feature | Pure PHP | Laravel | Symfony |
|---|---|---|---|
| DTOs & Validation | โ | โ | โ |
| Controller Injection | โ | โ Auto | โ Auto |
| Request Validation | โ Manual | โ Auto | โ Auto |
| Model/Entity Mapping | โ Plain Objects | โ Eloquent | โ Doctrine |
| Framework Attributes | โ | โ Auth/Can/Role | โ Granted/Role |
| Code Generation | โ | โ Artisan | โ Console |
| TypeScript Export | โ | โ | โ |
The Power: Get framework-specific features when you need them, without framework dependencies in your core code.
๐ Laravel Integration Guide โข Symfony Integration Guide
โก Core Components
The heart of this library: Data mapping and DTOs for transforming and structuring data, plus powerful data manipulation tools.
1๏ธโฃ DataAccessor - Read & Transform Data
Access deeply nested data with dot notation, wildcards, and powerful transformation methods:
$data = [ 'users' => [ ['name' => 'Alice', 'age' => '30', 'email' => 'alice@example.com'], ['name' => 'Bob', 'age' => '25', 'email' => 'bob@example.com'], ], ]; $accessor = new DataAccessor($data); // Generic get() - returns mixed $emails = $accessor->get('users.*.email'); // ['users.0.email' => 'alice@example.com', 'users.1.email' => 'bob@example.com'] // Type-safe getters - strict type conversion with nullable return $name = $accessor->getString('users.0.name'); // 'Alice' $age = $accessor->getInt('users.0.age'); // 30 (string โ int) $missing = $accessor->getString('users.0.phone'); // null // Collection getters for wildcards - returns DataCollection instances $ages = $accessor->getIntCollection('users.*.age'); // DataCollection<int> $names = $accessor->getStringCollection('users.*.name'); // DataCollection<string> // Transformation methods - filter, map, reduce directly on DataAccessor $filtered = $accessor->filter(fn($user) => $user['age'] > 25); // [['name' => 'Alice', ...]] $mapped = $accessor->map(fn($user) => $user['name']); // ['Alice', 'Bob'] $sum = $accessor->reduce(fn($carry, $user) => $carry + $user['age'], 0); // 55 // first() and last() with optional callback $firstUser = $accessor->first(); // ['name' => 'Alice', ...] $lastAdult = $accessor->last(fn($user) => $user['age'] >= 18); // Lazy evaluation for large datasets foreach ($accessor->lazyFilter(fn($user) => $user['age'] > 25) as $user) { // Process items one at a time without loading all into memory }
๐ DataAccessor Documentation
2๏ธโฃ DataCollection - Type-Safe Collections
Framework-independent collection class with fluent API. Uses DataAccessor for reading, DataMutator for writing, and DataFilter for SQL-like querying:
use event4u\DataHelpers\DataCollection; $collection = DataCollection::make([1, 2, 3, 4, 5]); // Filter, map, reduce with method chaining (delegates to DataAccessor) $result = $collection ->filter(fn($item) => $item > 2) // [3, 4, 5] ->map(fn($item) => $item * 2) // [6, 8, 10] ->reduce(fn($carry, $item) => $carry + $item, 0); // 24 // Dot-notation read access (via DataAccessor) $collection = DataCollection::make([ ['user' => ['name' => 'Alice', 'age' => 30]], ['user' => ['name' => 'Bob', 'age' => 25]], ]); $name = $collection->get('0.user.name'); // 'Alice' // Dot-notation write access (via DataMutator) - modifies in-place $collection ->set('0.user.city', 'Berlin') ->merge('1.user', ['city' => 'Munich', 'country' => 'Germany']) ->transform('0.user.name', fn($name) => strtoupper($name)); // SQL-like filtering (via DataFilter) - returns new DataCollection $users = DataCollection::make([ ['name' => 'Alice', 'age' => 30, 'city' => 'Berlin'], ['name' => 'Bob', 'age' => 25, 'city' => 'Munich'], ['name' => 'Charlie', 'age' => 35, 'city' => 'Berlin'], ]); $filtered = $users ->query() ->where('age', '>', 25) ->where('city', 'Berlin') ->orderBy('age', 'DESC') ->get(); // Returns new DataCollection // Lazy evaluation for large datasets foreach ($collection->lazyFilter(fn($item) => $item > 2) as $item) { // Process items one at a time without loading all into memory }
๐ DataCollection Documentation
3๏ธโฃ DataMutator - Modify Nested Data
Safely modify nested structures:
$data = ['user' => ['profile' => []]]; DataMutator::make($data) ->set('user.profile.name', 'Alice') ->merge('user.profile', ['age' => 30]); // $data is now modified: ['user' => ['profile' => ['name' => 'Alice', 'age' => 30]]]
๐ DataMutator Documentation
4๏ธโฃ DataFilter - Query Data
Filter and query data with SQL-like API:
$products = [ ['id' => 1, 'name' => 'Laptop', 'category' => 'Electronics', 'price' => 1200], ['id' => 2, 'name' => 'Mouse', 'category' => 'Electronics', 'price' => 25], ['id' => 3, 'name' => 'Monitor', 'category' => 'Electronics', 'price' => 400], ]; $result = DataFilter::query($products) ->where('category', '=', 'Electronics') ->where('price', '>', 100) ->orderBy('price', 'DESC') ->get(); // Result: [Laptop ($1200), Monitor ($400)]
5๏ธโฃ SimpleDto - Immutable Dtos
Create type-safe, immutable Data Transfer Objects with automatic type casting and multi-format serialization (JSON, XML, YAML, CSV):
use event4u\DataHelpers\SimpleDto\Attributes\NoCasts; // Default: Automatic type casting enabled class ReadmeUserDto extends SimpleDto { public function __construct( public readonly string $name, public readonly string $email, public readonly int $age, public readonly AddressDto $address, // Nested DTO (auto-cast by default) ) {} } // Automatic type conversion by default $user = ReadmeUserDto::fromArray([ 'name' => 'John', 'email' => 'john@example.com', 'age' => '30', // String "30" โ int 30 (automatic) 'address' => ['city' => 'Berlin'], // Array โ AddressDto (automatic) ]); // Disable automatic casting for better performance #[NoCasts] class StrictUserDto extends SimpleDto { public function __construct( public readonly string $name, public readonly int $age, // Must be int, no conversion public readonly AddressDto $address, // Must be AddressDto instance, no conversion ) {} } // Multi-format serialization $json = $user->toJson(); // JSON $xml = $user->toXml(); // XML $yaml = $user->toYaml(); // YAML $csv = $user->toCsv(); // CSV
Plain PHP Object Integration
SimpleDto seamlessly integrates with plain PHP objects (like Zend Framework models or any plain PHP classes):
use event4u\DataHelpers\SimpleDto; use event4u\DataHelpers\SimpleDto\Attributes\HasObject; use event4u\DataHelpers\SimpleDto\SimpleDtoObjectTrait; // Plain PHP object class Product { public int $id; public string $name; public float $price; } // DTO with plain object integration #[HasObject(Product::class)] class ProductDto extends SimpleDto { use SimpleDtoObjectTrait; public function __construct( public readonly int $id, public readonly string $name, public readonly float $price, ) {} } // Object โ DTO $product = new Product(); $product->id = 1; $product->name = 'Laptop'; $product->price = 999.99; $dto = ProductDto::fromObject($product); // DTO โ Object $newProduct = $dto->toObject(); // Uses HasObject attribute
Also works with getters/setters:
class Customer { private int $id; private string $name; public function getId(): int { return $this->id; } public function setId(int $id): void { $this->id = $id; } public function getName(): string { return $this->name; } public function setName(string $name): void { $this->name = $name; } } // fromObject() uses getters, toObject() uses setters $dto = CustomerDto::fromObject($customer); $newCustomer = $dto->toObject(Customer::class);
๐ Plain Object Integration Guide โข Example Code
6๏ธโฃ LiteDto - Ultra-Fast Dtos
Create ultra-fast, minimalistic DTOs with essential features:
use event4u\DataHelpers\LiteDto; use event4u\DataHelpers\LiteDto\Attributes\MapFrom; use event4u\DataHelpers\LiteDto\Attributes\Hidden; class UserDto extends LiteDto { public function __construct( public readonly string $name, #[MapFrom('email_address')] public readonly string $email, #[Hidden] public readonly string $password, ) {} } $user = UserDto::from([ 'name' => 'John', 'email_address' => 'john@example.com', 'password' => 'secret', ]); $array = $user->toArray(); // ['name' => 'John', 'email' => 'john@example.com'] // password is hidden
Performance: LiteDto is 7.6x faster than SimpleDto Normal (~2.3ฮผs vs ~18.5ฮผs)
3๏ธโฃ DataMapper - Transform Data
Map between different data structures with templates. Supports multi-format output (JSON, XML, YAML, CSV):
$source = [ 'user' => ['name' => 'John Doe', 'email' => 'john@example.com'], 'orders' => [ ['id' => 1, 'status' => 'shipped', 'total' => 100], ['id' => 2, 'status' => 'pending', 'total' => 50], ['id' => 3, 'status' => 'shipped', 'total' => 200], ], ]; $result = DataMapper::from($source) ->template([ 'customer_name' => '{{ user.name }}', 'customer_email' => '{{ user.email }}', 'shipped_orders' => [ 'WHERE' => [ '{{ orders.*.status }}' => 'shipped', ], 'ORDER BY' => [ '{{ orders.*.total }}' => 'DESC', ], '*' => [ 'id' => '{{ orders.*.id }}', 'total' => '{{ orders.*.total }}', ], ], ]) ->map() ->getTarget();
๐ก No-Code Data Mapping: Templates can be stored in a database and created with a drag-and-drop editor - perfect for import wizards, API integrations and ETL pipelines without writing code!
โ ๏ธ XML Files: When loading XML files with sourceFile(), the root element name is preserved. Always include it in your paths: '{{ company.name }}' for <company><name>...</name></company>.
7๏ธโฃ Utility Helpers - Common Data Operations
Simplify common data operations with specialized helper classes:
use event4u\DataHelpers\Helpers\MathHelper; use event4u\DataHelpers\Helpers\EnvHelper; // Math operations with precision $result = MathHelper::add('10.5', '20.3', 2); // 30.8 $average = MathHelper::average([10, 20, 30]); // 20.0 $sum = MathHelper::sum([5, 10, 15]); // 30.0 // Environment variable access with type casting $debug = EnvHelper::boolean('APP_DEBUG', false); $port = EnvHelper::integer('APP_PORT', 8080); $timeout = EnvHelper::float('REQUEST_TIMEOUT', 30.0);
Available Helpers:
- MathHelper - Precision math operations using bcmath (add, subtract, multiply, divide, modulo, powerOf, squareRoot, compare, min, max, sum, average, product, time conversions)
- EnvHelper - Type-safe environment variable access with framework detection (get, has, string, integer, float, boolean, array)
- ConfigHelper - Singleton configuration manager with framework detection and dot notation (getInstance, get, getBoolean, getInteger, getFloat, getString, getArray, has, set, reset)
- DotPathHelper - Dot notation path utilities with wildcard support (segments, buildPrefix, isWildcard, containsWildcard)
- ObjectHelper - Deep object cloning with recursion control (copy)
๐ฏ Advanced Features
No-Code Data Mapping
Store templates in database and create mappings without programming:
// Load template from database (created with drag-and-drop editor) $template = Mappings::find(3)->template; $result = DataMapper::from($source) ->template($template) ->map() ->getTarget();
Perfect for:
- ๐ฅ Import Wizards - Let users map CSV/Excel columns to your data model
- ๐ API Integration - Configure API mappings without code changes
- ๐ข Multi-Tenant Systems - Each tenant can have custom data mappings
- ๐ Dynamic ETL - Build data transformation pipelines visually
- ๐ Form Builders - Map form submissions to different data structures
๐ Template-Based Mapping Guide
Complex Nested Mapping
Map complex nested structures to Eloquent Models or Doctrine Entities:
// Automatic relation detection for Eloquent/Doctrine $company = new Company(); $result = DataMapper::from($jsonData) ->target($company) ->template([ 'name' => '{{ company.name }}', 'departments' => [ '*' => [ 'name' => '{{ company.departments.*.name }}', 'budget' => '{{ company.departments.*.budget }}', ], ], ]) ->map() ->getTarget();
- โ Automatic Relation Detection
- โ Type Casting (string โ int/float/bool)
- โ Snake_case โ camelCase conversion
- โ Nested Wildcards
Pipeline API
Transform data with composable filters:
use Tests\Utils\Docu\TrimStrings; use Tests\Utils\Docu\LowercaseEmails; use Tests\Utils\Docu\SkipEmptyValues; $source = ['name' => ' John ', 'email' => 'JOHN@EXAMPLE.COM']; $mapping = ['name' => '{{ name }}', 'email' => '{{ email }}']; $result = DataMapper::from($source) ->template($mapping) ->pipeline([ new TrimStrings(), new LowercaseEmails(), new SkipEmptyValues(), ]) ->map() ->getTarget(); // $result = ['name' => 'John', 'email' => 'john@example.com']
Template Expressions
Use Twig-like expressions with 18+ built-in filters:
$mapping = [ 'name' => '{{ user.firstName | ucfirst }} {{ user.lastName | ucfirst }}', 'email' => '{{ user.email | lower | trim }}', 'role' => '{{ user.role | upper ?? "USER" }}', ];
๐ Template Expressions
Query Builder
Laravel-style fluent interface for building queries:
$result = DataMapper::query() ->source('products', $data) ->where('category', 'Electronics') ->where('price', '>', 100) ->orderBy('price', 'DESC') ->groupBy('category', ['total' => ['COUNT']]) ->get();
๐ Query Builder Documentation
๐ Documentation
Comprehensive documentation with guides, examples and API reference is available at:
๐ event4u-app.github.io/data-helpers
The documentation includes:
- ๐ Getting Started Guides - Installation, configuration and quick start tutorials
- ๐ง Main Classes - Detailed guides for DataAccessor, DataMutator, DataMapper and DataFilter
- ๐ฏ SimpleDto - Type-safe Dtos with validation, casting and collections
- โก LiteDto - Ultra-fast, minimalistic Dtos (7.6x faster than SimpleDto)
- ๐ Advanced Features - Template expressions, query builder, pipelines and reverse mapping
- ๐ Framework Integration - Laravel, Symfony and Doctrine integration guides
- ๐ก 90+ Code Examples - Runnable examples for every feature
- ๐ Performance Benchmarks - Optimization tips and benchmark results
- ๐ Complete API Reference - Full API documentation for all classes and methods
๐งช Testing & Quality
- โ 4700+ tests with comprehensive coverage
- โ PHPStan Level 9 - Highest static analysis level
- โ 100% type coverage - All methods fully typed
- โ Continuous Integration - Automated testing across PHP 8.2, 8.3, 8.4
๐ Contributing Guide โข Development Setup
โก Performance
All operations are highly optimized:
- Simple access: ~0.1ฮผs
- Nested access: ~0.5ฮผs
- Wildcards: ~1ฮผs
- SimpleDto #[UltraFast] is up to 12.1x faster than Other Serializer
๐ Performance Benchmarks โข Optimization Tips
๐ค Contributing
Contributions are welcome! Please see the Contributing Guide for details.
# Install dependencies composer install # Run tests composer test # Run quality checks composer quality
๐ Sponsoring
This package is part of the event4u ecosystem - a comprehensive event management platform. Your sponsorship helps us:
- ๐ Develop event4u - The next-generation event management app
- ๐ฆ Maintain open-source packages - Like this Data Helpers library
- ๐ง Build new tools - More packages and utilities for the PHP community
- ๐ Improve documentation - Better guides and examples
- ๐ Fix bugs faster - Dedicated time for maintenance and support
Support the Development
Every contribution, no matter how small, makes a difference and is greatly appreciated! ๐
๐ License
MIT License. See LICENSE for details.
๐ Show Your Support
If this package helps you, please consider:
- โญ Giving it a star on GitHub
- ๐ Sponsoring the development
- ๐ข Sharing it with others