{"id":17109050,"url":"https://github.com/sirn-se/phrity-comparison","last_synced_at":"2026-05-27T18:32:49.751Z","repository":{"id":48898328,"uuid":"115099589","full_name":"sirn-se/phrity-comparison","owner":"sirn-se","description":"[php-lib] Interfaces and helper trait for comparing objects. Comparator utility class for sort and filter applications.","archived":false,"fork":false,"pushed_at":"2025-12-05T10:10:34.000Z","size":72,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"main","last_synced_at":"2026-03-13T08:31:28.096Z","etag":null,"topics":["comparable","comparator","comparison","equalable","filter","php","php-library","sort"],"latest_commit_sha":null,"homepage":"https://phrity.sirn.se/comparison","language":"PHP","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/sirn-se.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2017-12-22T09:24:33.000Z","updated_at":"2025-12-05T07:38:34.000Z","dependencies_parsed_at":"2024-12-02T00:15:25.213Z","dependency_job_id":null,"html_url":"https://github.com/sirn-se/phrity-comparison","commit_stats":{"total_commits":41,"total_committers":3,"mean_commits":"13.666666666666666","dds":0.1707317073170732,"last_synced_commit":"1b876e67d8fe7bb23ae130476c19cc99d128ee92"},"previous_names":[],"tags_count":8,"template":false,"template_full_name":null,"purl":"pkg:github/sirn-se/phrity-comparison","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/sirn-se%2Fphrity-comparison","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/sirn-se%2Fphrity-comparison/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/sirn-se%2Fphrity-comparison/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/sirn-se%2Fphrity-comparison/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/sirn-se","download_url":"https://codeload.github.com/sirn-se/phrity-comparison/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/sirn-se%2Fphrity-comparison/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":33554930,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-05-26T15:22:16.424Z","status":"online","status_checked_at":"2026-05-27T02:00:06.184Z","response_time":53,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["comparable","comparator","comparison","equalable","filter","php","php-library","sort"],"created_at":"2024-10-14T16:21:56.595Z","updated_at":"2026-05-27T18:32:49.737Z","avatar_url":"https://github.com/sirn-se.png","language":"PHP","funding_links":[],"categories":[],"sub_categories":[],"readme":"[![Build Status](https://github.com/sirn-se/phrity-comparison/actions/workflows/acceptance.yml/badge.svg)](https://github.com/sirn-se/phrity-comparison/actions)\n[![Coverage Status](https://coveralls.io/repos/github/sirn-se/phrity-comparison/badge.svg?branch=master)](https://coveralls.io/github/sirn-se/phrity-comparison?branch=master)\n\n# Comparison\n\nInterfaces and helper trait for comparing objects. Comparator utility class for sort and filter applications.\n\nCurrent version supports PHP `^7.1|^8.0`.\n\n## Installation\n\nInstall with [Composer](https://getcomposer.org/);\n```\ncomposer require phrity/comparison\n```\n\n## The Equalable interface\n\n###  Interface synopsis\n\n```php\ninterface Phrity\\Comparison\\Equalable {\n\n    /* Abstract methods */\n    abstract public equals(mixed $compare_with) : bool\n}\n```\n\n###  Examples\n\n```php\n// $a must implement Equalable, $b can be anything\n$a-\u003eequals($b); // True if $a is equal to $b\n```\n\n## The Comparable interface\n\nExtends `Equalable` interface.\n\n###  Interface synopsis\n\n```php\ninterface Phrity\\Comparison\\Comparable\n    extends Phrity\\Comparison\\Equalable {\n\n    /* Abstract methods */\n    abstract public greaterThan(mixed $compare_with) : bool\n    abstract public greaterThanOrEqual(mixed $compare_with) : bool\n    abstract public lessThan(mixed $compare_with) : bool\n    abstract public lessThanOrEqual(mixed $compare_with) : bool\n    abstract public compare(mixed $compare_with) : int\n\n    /* Inherited from Equalable */\n    abstract public equals(mixed $compare_with) : bool\n}\n```\n\n###  Examples\n\n```php\n// $a must implement Comparable, $b can be anything\n$a-\u003egreaterThan($b);        // True if $a is greater than $b\n$a-\u003egreaterThanOrEqual($b); // True if $a is greater than or equal to $b\n$a-\u003elessThan($b);           // True if $a is less than $b\n$a-\u003elessThanOrEqual($b);    // True if $a is less than or equal to $b\n\n//  0 if $a is equal to $b\n// -1 if $a is less than $b\n//  1 if $a is greater than $b\n$a-\u003ecompare($b);\n```\n\n## The ComparisonTrait trait\n\nA class using this trait only has to implement the `compare()` method. Enables all other methods in `Equalable` and `Comparable` intefaces.\n\n###  Trait synopsis\n\n```php\ntrait Phrity\\Comparison\\ComparisonTrait\n    implements Phrity\\Comparison\\Comparable {\n\n    /* Methods */\n    public equals(mixed $compare_with) : bool\n    public greaterThan(mixed $compare_with) : bool\n    public greaterThanOrEqual(mixed $compare_with) : bool\n    public lessThan(mixed $compare_with) : bool\n    public lessThanOrEqual(mixed $compare_with) : bool\n\n    /* Inherited from Comparable */\n    abstract public compare(mixed $compare_with) : int\n}\n```\n\n## The Comparator class\n\nUtility class to sort and filter array objects that implement the `Comparable` interface.\n\n###  Class synopsis\n\n```php\nclass Phrity\\Comparison\\Comparator {\n\n    /* Methods */\n    public __construct(array $comparables = null)\n    public sort(array $comparables = null) : array\n    public rsort(array $comparables = null) : array\n    public equals(Comparable $condition, array $comparables = null) : array\n    public greaterThan(Comparable $condition, array $comparables = null) : array\n    public greaterThanOrEqual(Comparable $condition, array $comparables = null) : array\n    public lessThan(Comparable $condition, array $comparables = null) : array\n    public lessThanOrEqual(Comparable $condition, array $comparables = null) : array\n    public min(array $comparables = null) : Comparable\n    public max(array $comparables = null) : Comparable\n}\n```\n\n###  Examples\n\n```php\n$comparables = [$v2, $v1, $v4, $v3];\n$condition = $v3;\n$comparator = new Comparator();\n\n// Sort and reverse sort array of Comparable\n$comparator-\u003esort($comparables); // [$v1, $v2, $v3, $v4]\n$comparator-\u003ersort($comparables); // [$v4, $v3, $v2, $v1]\n\n// Filter array of Comparable using a Comparable as condition\n$comparator-\u003eequals($condition, $comparables); // [$v3]\n$comparator-\u003egreaterThan($condition, $comparables); // [$v4]\n$comparator-\u003egreaterThanOrEqual($condition, $comparables); // [$v4, $v3]\n$comparator-\u003elessThan($condition, $comparables); // [$v2, $v1]\n$comparator-\u003elessThanOrEqual($condition, $comparables); // [$v2, $v1, $v3]\n\n// Select min/max instance\n$comparator-\u003emin($comparables); // $v1\n$comparator-\u003emax($comparables); // $v4\n\n// Can also \"store\" comparables for re-use in multiple operations\n$comparables = [$v2, $v1, $v4, $v3];\n$comparator = new Comparator($comparables);\n$comparator-\u003esort(); // [$v1, $v2, $v3, $v4]\n$comparator-\u003eequals($condition); // [$v3]\n$comparator-\u003emin(); // $v1\n```\n\n## The IncomparableException class\n\nMust be thrown if comparison methods receive input they can not compare with.\n\n###  Class synopsis\n\n```php\nclass Phrity\\Comparison\\IncomparableException\n    extends InvalidArgumentException {\n\n    /* Inherited from InvalidArgumentException */\n    public __construct([string $message = '' [, int $code = 0 [, Throwable $previous = null]]])\n    public getMessage() : string\n    public getPrevious() : Throwable\n    public getCode() : mixed\n    public getFile() : string\n    public getLine() : int\n    public getTrace() : array\n    public getTraceAsString() : string\n    public __toString() : string\n}\n```\n\n\n## Versions\n\n| Version | PHP | |\n| --- | --- | --- |\n| `1.3` | `^7.1\\|^8.0` |  |\n| `1.2` | `^7.1` | The `Comparator` supports stored content for multiple operations |\n| `1.1` | `\u003e=5.6` | The `Comparator` class for sort and filter |\n| `1.0` | `\u003e=5.6` | `Equalable` and `Comparable` interface, `ComparisonTrait` trait |\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fsirn-se%2Fphrity-comparison","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fsirn-se%2Fphrity-comparison","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fsirn-se%2Fphrity-comparison/lists"}