jmf/sort

按键、属性等对数组进行排序

1.0.0 2024-06-01 15:40 UTC

This package is auto-updated.

Last update: 2024-08-31 18:12:12 UTC


README

安装与需求

使用 Composer 安装 Composer

composer require jmf/sort

用法

关联排序器

对提供的数组进行排序,保留键值关联。

<?php

use Jmf\Sort\AssociativeSorter;

$sorter = new AssociativeSorter();

$unsorted = [
    'foo' => 'def',
    'bar' => 'abc',
    'baz' => 'ghi',
];

$sorted = $sorter->sort($unsorted);

按键排序器

按键对提供的数组进行排序。

<?php

use Jmf\Sort\ByKeySorter;

$sorter = new ByKeySorter();

$unsorted = [
    'def' => 'foo',
    'abc' => 'bar',
    'ghi' => 'baz',
];

$sorted = $sorter->sort($unsorted);

按值排序器

按值对提供的数组进行排序,丢失键值关联。

<?php

use Jmf\Sort\ByValueSorter;

$sorter = new ByValueSorter();

$unsorted = [
    'def',
    'abc',
    'ghi',
];

$sorted = $sorter->sort($unsorted);

按属性排序器

根据一个或多个属性对提供的数组(数组或对象数组)进行排序,并保留键值关联。

属性路径语法来自 Symfony PropertyAccess 组件

排序数组

<?php

use Jmf\Sort\ByPropertySorter;

$sorter = ByPropertySorter::createDefault();

$unsorted = [
    ['foo' => 'def', 'bar' => 123],
    ['foo' => 'abc', 'bar' => 123],
    ['foo' => 'abc', 'bar' => 23],
    ['foo' => 'ghi', 'bar' => 345],
];

$sorted = $sorter->sort(
    $unsorted,
    [
        PropertyPass::asc(
            '[foo]',
        ),
        PropertyPass::desc(
            '[bar]',
            SORT_NUMERIC,
        ),
    ]
);

排序对象

<?php

use Jmf\Sort\ByPropertySorter;

$sorter = ByPropertySorter::createDefault();

$articles = getArticles(); // Objects from a repository. 

$sorted = $sorter->sort(
    $articles,
    [
        PropertyPass::desc(
            'publicationDate',
        ),
        PropertyPass::asc(
            'author.name',
        ),
        PropertyPass::asc(
            'title',
        ),
    ]
);