rikudou/array-sort

用于排序数组的类

v1.0.1 2017-11-01 15:02 UTC

This package is auto-updated.

Last update: 2024-08-29 01:48:47 UTC


README

简单的数组排序类,它只是内置PHP函数的包装器。

所有排序方法都在数组的副本上执行,它们不会修改原始数组,并返回数组。或者抛出 \rikudou\ArraySortException

安装

使用composer: composer require rikudou/array-sort

用法

为了更好地控制排序方法,可以通过类型进行链式调用。

示例

<?php
use rikudou\ArraySort;

$array = [
  1, 2, 3, 4, 5
];

$sorter = new ArraySort($array);

$sortedArray = $sorter->byValue()->maintainKeys()->sortReverse();

所有方法都是这样链式调用的。

类型

  • byValue()
    • maintainKeys()
    • discardKeys()
  • byKey()

魔法方法

这个类也可以与魔法方法一起使用,因此您不必编写整个链。

示例

<?php
use rikudou\ArraySort;

$array = [
  1, 2, 3, 4, 5
];

$sorter = new ArraySort($array);

$sortedArray = $sorter->sortReverse();

行为由类的优先级控制,默认情况下是

  1. 按值排序
    1. 保持键
    2. 丢弃键
  2. 按键排序

可以通过使用带有 ArraySortPrecedenceConstants 类的帮助的静态方法 setOrder() 来更改顺序。

示例

<?php

use rikudou\ArraySort;
use rikudou\ArraySortPrecedenceConstants;

ArraySort::setOrder([
  ArraySortPrecedenceConstants::BY_KEY
]);

这表示默认情况下将查找按键排序方法中的魔法方法。

您不必指定所有顺序,其余的将自动按默认顺序附加。

所以上面的代码等同于以下代码

  1. 按键排序
  2. 按值排序
    1. 保持键
    2. 丢弃键

另一个示例

<?php

use rikudou\ArraySort;
use rikudou\ArraySortPrecedenceConstants;

ArraySort::setOrder([
  ArraySortPrecedenceConstants::DISCARD_KEY
]);

这意味着

  1. 按值排序
    1. 丢弃键
    2. 保持键
  2. 按键排序

当然,您也可以设置整个顺序

<?php

use rikudou\ArraySort;
use rikudou\ArraySortPrecedenceConstants;

ArraySort::setOrder([
  ArraySortPrecedenceConstants::BY_KEY,
  ArraySortPrecedenceConstants::BY_VALUE,
  ArraySortPrecedenceConstants::DISCARD_KEY,
  ArraySortPrecedenceConstants::MAINTAIN_KEY
]);

这等同于

  1. 按键排序
  2. 按值排序
    1. 丢弃键
    2. 保持键

魔法方法使用反射,所以它比正常链式调用慢,但它也使用缓存,所以如果它在类中找到一次方法,之后它会使用该类而无需再次查找。

如果更改顺序,则缓存将被刷新,并且必须重新查找所有魔法方法调用。

所有魔法方法都有docblock注释,因此IDE应该能够提示方法名称。