Download the PHP package ozdemir/subset-finder without Composer
On this page you can find all versions of the php package ozdemir/subset-finder. It is possible to download/install these versions without Composer. Possible dependencies are resolved automatically.
Download ozdemir/subset-finder
More information about ozdemir/subset-finder
Files in ozdemir/subset-finder
Package subset-finder
Short Description Find how many complete sets can be built from a pool of item quantities - cart promotions, bundles, inventory allocation.
License MIT
Homepage https://github.com/n1crack/subset-finder
Informations about the package subset-finder
SubsetFinder PHP Package
A dependency-free PHP package for finding subsets within collections based on quantity criteria.
Given a pool of items with quantities, it answers: "How many complete sets can I build, which items go into them, and what is left over?" — useful for bundle pricing, cart discounts ("buy 5 of X and 2 of Y"), and inventory allocation.
▶ See it in action — five practical use cases (cart promotions, gift boxes, assembly, capacity planning, shared stock) with output captured from the actual package. The page is generated by php docs/build.php.
Features
- Pure arithmetic solver: quantities are never expanded into unit items, so memory stays flat and quantities in the billions solve in milliseconds
- Overlap aware: subsets sharing the same item ids draw from a shared pool and are never double counted
- Flexible ordering: allocate cheapest (or any sort order) items first
- Type safe: PHP 8.2+, strict
Subsetableinterface - Zero dependencies: plain PHP; accepts arrays or any iterable (including Laravel collections)
Installation
Quick Start
The Subsetable interface
Collection items must implement Subsetable:
Item ids and quantities are read through the interface, so your property names don't matter. Only sortField in the config refers to a property of your objects.
Configuration
Using the Trait
Add subset operations to any iterable collection class of your own — for example a Laravel collection:
Other methods
When it fits
The solver models fungible quantity pools: units of the same id are interchangeable, and an item's quantity can split freely across sets (goods, portions, hours, credits). It does not model per-set distinctness — if each set needs N different individuals (e.g. two distinct people per shift), that's an assignment problem, not a quantity pool.
How it works
- Quantities are aggregated per item id; items are sorted by
sortField. - The maximum number of complete sets is found by binary search. For each candidate, subsets claim quantities from the shared pool in definition order, consuming items in sort order.
- The winning allocation becomes
getFoundSubsets(); whatever is left becomesgetRemaining().
The solver never materializes individual units, so runtime and memory depend on the number of distinct items, not their quantities.
Error Handling
Testing
Contributing
Contributions are welcome! Please feel free to submit a Pull Request.
License
The MIT License (MIT). Please see License File for more information.