diego-ninja / sorter
通过多个字段对数组和对象进行排序,支持Unicode字符
1.0.1
2024-01-17 15:32 UTC
Requires
- php: ^8.2
- ext-bcmath: *
- ext-intl: *
- ext-mbstring: *
Requires (Dev)
- captainhook/captainhook: ^5.10
- captainhook/plugin-composer: ^5.3
- ergebnis/composer-normalize: ^2.30
- friendsofphp/php-cs-fixer: ^3.40
- icanhazstring/composer-unused: ^0.8.9
- maglnet/composer-require-checker: ^4.6
- mockery/mockery: ^1
- moxio/captainhook-psalm: ^0.3.0
- overtrue/phplint: ^9.0
- php-parallel-lint/php-console-highlighter: ^1.0
- php-parallel-lint/php-parallel-lint: ^1.3
- phpstan/extension-installer: ^1.3
- phpstan/phpstan: ^1.10
- phpunit/phpunit: ^10
- ramsey/conventional-commits: ^1.3
- roave/security-advisories: dev-latest
- scrutinizer/ocular: ^1.9
- dev-main
- 1.0.1
- 1.0.0
- dev-dependabot/composer/phpunit/phpunit-10.5.19
- dev-dependabot/composer/friendsofphp/php-cs-fixer-3.54.0
- dev-dependabot/composer/phpstan/phpstan-1.10.67
- dev-dependabot/composer/captainhook/captainhook-5.23.0
- dev-dependabot/composer/maglnet/composer-require-checker-4.11.0
- dev-dependabot/composer/php-parallel-lint/php-parallel-lint-1.4.0
- dev-dependabot/composer/mockery/mockery-1.6.11
- dev-dependabot/composer/overtrue/phplint-9.1.2
- dev-dependabot/composer/ergebnis/composer-normalize-2.42.0
This package is auto-updated.
Last update: 2024-09-18 10:27:31 UTC
README
安装
使用Composer进行安装
composer require diego-ninja/sorter
您可以通过运行以下命令来测试库(假设您有phpunit
命令)
phpunit ./tests
使用
使用默认设置进行排序
use Ninja\Sorter\Sorter; $data = array('ccc', 'aaa', 'bbb'); $sorter = new Sorter(); $data = $sorter->sort($data); print_r($data); // prints array('aaa', 'bbb', 'ccc');
使用特定区域设置进行排序
UnicodeCIComparator
(不区分大小写)比较器是此库以及默认情况下创建时使用的默认比较器,默认情况下它使用当前系统区域设置(来自php.ini)。
值得注意的是,当使用此比较器时,它可能会产生对数字的看起来很奇怪的结果。例如,
-1000
大于-100
。如果您想按实际值比较数字,请使用NumericComparator
。
use Ninja\Sorter\Comparator\UnicodeCIComparator; use Ninja\Sorter\Sorter; use Ninja\Sorter\Strategy\SimpleSortStrategy; $strategy = new SimpleSortStrategy(); $strategy->setComparator(new UnicodeCIComparator('pl_PL')); $sorter = new Sorter($strategy); $sorter->sort(...);
保持键完整性的数组排序
use Ninja\Sorter\Sorter; use Ninja\Sorter\Strategy\SimpleSortStrategy; $array = array(0 => 'a', 1 => 'c', 2 => 'b'); $strategy = new SimpleSortStrategy(); $strategy->setPreserveKeys(true); $sorter = new Sorter($strategy); $sorter->sort($array); print_r($array); // prints array(0 => 'a', 2 => 'b', 1 => 'c')
排序复杂对象
use Ninja\Sorter\Sorter; use Ninja\Sorter\Strategy\ComplexSortStrategy; $data = array( (object)array('name' => 'Ann', 'position' => '3', 'rating' => '3'), (object)array('name' => 'Ann', 'position' => '2', 'rating' => '2'), (object)array('name' => 'Ann', 'position' => '2', 'rating' => '1'), (object)array('name' => 'Betty', 'position' => '1', 'rating' => '2'), ); $strategy = new ComplexSortStrategy(); $strategy ->setSortOrder(Sorter::ASC) ->sortBy('position') // sort by position ->sortBy('name') // sort by name if position is equal ->sortBy(function($object){return $object->rating}) // sort by rating if name is equal ; $sorter = new src\Sorter(); $data = $sorter->setStrategy($strategy)->sort($data); print_r($data); // prints: // // Array // ( // [0] => stdClass Object // ( // [name] => Betty // [position] => 1 // [rating] => 2 // ) // // [1] => stdClass Object // ( // [name] => Ann // [position] => 2 // [rating] => 1 // ) // // [2] => stdClass Object // ( // [name] => Ann // [position] => 2 // [rating] => 2 // ) // // [3] => stdClass Object // ( // [name] => Ann // [position] => 3 // [rating] => 3 // ) // )
自定义
您可以为自己更复杂的数据集创建自己的策略。提供的 ComplexSortStrategy
应该能满足您的需要,如果不能满足,请尝试使用自己的比较器。您可以替换整个策略的默认比较器,或只为特定属性定义自己的比较器。
$strategy ->setSortOrder(Sorter::ASC) ->sortBy('position') ->sortBy('name', Sorter::DESC, new MyOwnPropertyComparator()) ->sortBy('rating') ; // or set your own comparator $strategy->setComparator(new MyOwnPropertyComparator());
贡献
所有代码贡献都必须通过拉取请求。
将项目分支,创建一个功能分支,并发送给我一个拉取请求。
作者
此库受到了https://github.com/graze/sort的启发。
- Jacek Kobus - kobus.jacek@gmail.com
- Diego Rin - yosoy@diego.ninja