dragon-code/size-sorter

Easily sort clothing size, height, bra size, furniture size and more
30,120 39
Install
composer require dragon-code/size-sorter
Latest Version:2.1.0
PHP:^8.2
Laravel:11 · 12 · 13
Older releases:8 · 9 · 10
License:MIT
Last Updated:Jun 20, 2026
Links: GitHub  ·  Packagist
Maintainer: Helldar

Size Sorter

Stable Version Total Downloads Github Workflow Status License

Easily sort clothing size, height, bra size, furniture size and more

Installation

To get the latest version of Size Sorter, simply require the project using Composer:

composer require dragon-code/size-sorter

Or manually update require block of composer.json and run composer update.

{
    "require": {
        "dragon-code/size-sorter": "^2.0"
    }
}

[!TIP]

When using the Laravel framework, make sure that its version is 11.0 or greater.

Usage

When calling a sort with common values, each element will be assigned to one of five groups:

  1. Letter clothing size (XXS, XS, M, L, 2XL, etc.)
  2. Numerical size of clothes and shoes (9, 10, 44-46, 48, etc.)
  3. Bra size (70B, 75A, 80C, etc...)
  4. Overall dimensions of items (40x38x19 sm, etc.)
  5. Volumes (450 ml, 30 l, 450ml, 30l, etc.)
  6. Other values
use DragonCode\SizeSorter\SizeSorter;

return new SizeSorter([
    'XXL',
    '26',
    '28',
    'XL',
    'ONE SIZE',
    'XXS',
    '2',
    '54',
])->sort();

/*
 * Returns:
 * 
 * Illuminate\Support\Collection([
 *   'XXS',
 *   'XL',
 *   'XXL',
 *   '2',
 *   '26',
 *   '28',
 *   '54',
 *   'ONE SIZE',
 * ])
 */
use DragonCode\SizeSorter\SizeSorter;

// Laravel models collection
$items = Size::get();

return new SizeSorter($items)
    ->column('title')
    ->sort();

The static items method is also available:

use DragonCode\SizeSorter\SizeSorter;

return SizeSorter::items([
    // ...
])->sort();

Groups Order

By default, sizes are sorted by the following logical blocks:

  1. Letter clothing size (XXS, XS, M, L, 2XL, etc.)
  2. Numerical size of clothes and shoes (9, 10, 44-46, 48, etc.)
  3. Bra size (70B, 75A, 80C, etc...)
  4. Overall dimensions of items (40x38x19 sm, etc.)
  5. Volumes (450 ml, 30 l, 450ml, 30l, etc.)
  6. Other values

But you can change the order by specifying identifiers as the third parameter:

use DragonCode\SizeSorter\Enum\Group;
use DragonCode\SizeSorter\SizeSorter;

return new SizeSorter($items)
    ->orderBy([
        Group::BraSize,
        Group::OtherSizes,
        Group::OverallDimensions,
        Group::ClothesAndShoes,
        Group::VolumeGroup,
        Group::LetterClothingSize,
    ])
    ->sort();

The final array will be formed in the specified order:

3 - 5 - 4 - 2 - 1

You can also specify some groups. For example:

use DragonCode\SizeSorter\Enum\Group;
use DragonCode\SizeSorter\SizeSorter;

return new SizeSorter($items)
    ->orderBy([
        Group::BraSize,
        Group::OtherSizes,
    ])
    ->sort();

In this case, the first two logical groups will be sorted in the specified order, and the subsequent ones will be in ascending order:

3 - 5 - 1 - 2 - 4

Custom Column

When working with an array of objects, you can specify which value can be used for sorting.

use DragonCode\SizeSorter\SizeSorter;

return new SizeSorter($items)
    ->column('foo')
    ->sort();

You can also use "dotted" notation:

use DragonCode\SizeSorter\SizeSorter;

$items = [
    [
        'foo' => [
            'bar' => [
                'baz' => 'Some value',
            ]
        ]
    ]
];

return new SizeSorter($items)
    ->column('foo.bar.baz')
    ->sort();

And you can use the callback function in the same way:

use DragonCode\SizeSorter\SizeSorter;

class Foo
{
    public function __construct(
        public int $number,
        public string $value1,
        public string $value2,
    ) {}
}

$items = [
    new Foo(1, 'first 1', 'first 2'),
    new Foo(2, 'second 1', 'second 2'),
];

return new SizeSorter($items)
    ->column(function (Foo $item) {
        return $item->number % 2 === 0
            ? $item->value1
            : $item->value2;
    })
    ->sort();

And this is also possible:

use DragonCode\SizeSorter\SizeSorter;

$items = [
    ['foo' => 'XS'],
    ['foo' => '2XS'],
    ['foo' => '3XL'],
];

return new SizeSorter($items)
    ->column(function (array $item) {
        return match ($item['foo']) {
            '2XS' => 'XXS',
            '3XL' => 'XXXL',
            default => $item['foo']
        };
    })
    ->sort();

Upgrade Guide

You can find the upgrade documentation here.

License

This package is licensed under the MIT License.

Related Packages

dragon-code/laravel-cache

An improved interface for working with cache

47,321 70
dragon-code/laravel-data-dumper

Adding data from certain tables when executing the `php artisan schema:dump` con...

30,126 35
rogercbe/table-sorter

A package to easily add sorting functionality to any of your models along with h...

656 5

Version History

Version Released PHP Laravel License
2.1.0 ^8.2 ^11.0 || ^12.0 || ^13.0 MIT
2.0.1 ^8.2 ^11.0 || ^12.0 MIT
2.0.0 ^8.2 ^11.0 || ^12.0 MIT
1.6.0 ^8.1 ^8.75 || ^9.0 || ^10.0 || ^11.0 || ^12.0 MIT
1.5.0 ^8.1 ^8.75 || ^9.0 || ^10.0 || ^11.0 MIT