rmtram/sorter

多个数组的简单排序。

v2.0.0 2019-12-21 12:03 UTC

This package is auto-updated.

Last update: 2024-09-21 23:06:04 UTC


README

Build Status Latest Stable Version Total Downloads License

Sorter

多个数组的简单排序。

安装

$ composer require rmtram/sorter

或者

源代码下载

复制文件: src/Sorter.php

require '/path/to/Sorter.php';

内容

方法

make

  • 创建实例。
$items = [
    ['id' => 1, 'name' => 'abc', 'created_at' => '2015-10-14 10:10:01'],
    ['id' => 2, 'name' => 'def', 'created_at' => '2015-10-14 10:10:05'],
    ['id' => 5, 'name' => 'mno', 'created_at' => '2015-10-14 10:10:39'],
    ['id' => 3, 'name' => 'ghi', 'created_at' => '2015-10-14 10:10:09']
];

$sorter = Rmtram\Sorter\Sorter::make($items);

runSort

$items = [
    ['id' => 1, 'name' => 'abc', 'created_at' => '2015-10-14 10:10:01'],
    ['id' => 2, 'name' => 'def', 'created_at' => '2015-10-14 10:10:05'],
    ['id' => 5, 'name' => 'mno', 'created_at' => '2015-10-14 10:10:39'],
    ['id' => 3, 'name' => 'ghi', 'created_at' => '2015-10-14 10:10:09']
];

$results = Rmtram\Sorter\Sorter::runSort($items, ['id' => 'asc'], ['id'], 1, 1);

var_dump($results);
  • 结果
array(1) {
  [0]=>
  array(1) {
    ["id"]=>
    int(2)
  }
}

sort

单个(id => 升序)

  • 源代码
$items = [
    ['id' => 1, 'name' => 'abc', 'created_at' => '2015-10-14 10:10:01'],
    ['id' => 2, 'name' => 'def', 'created_at' => '2015-10-14 10:10:05'],
    ['id' => 5, 'name' => 'mno', 'created_at' => '2015-10-14 10:10:39'],
    ['id' => 3, 'name' => 'ghi', 'created_at' => '2015-10-14 10:10:09']
];

$results = Rmtram\Sorter\Sorter::make($items)->sort(['id' => 'asc']);

var_dump($results);
  • 结果
array(4) {
  [0]=>
  array(3) {
    ["id"]=>
    int(1)
    ["name"]=>
    string(3) "abc"
    ["created_at"]=>
    string(19) "2015-10-14 10:10:01"
  }
  [1]=>
  array(3) {
    ["id"]=>
    int(2)
    ["name"]=>
    string(3) "def"
    ["created_at"]=>
    string(19) "2015-10-14 10:10:05"
  }
  [2]=>
  array(3) {
    ["id"]=>
    int(3)
    ["name"]=>
    string(3) "ghi"
    ["created_at"]=>
    string(19) "2015-10-14 10:10:09"
  }
  [3]=>
  array(3) {
    ["id"]=>
    int(5)
    ["name"]=>
    string(3) "mno"
    ["created_at"]=>
    string(19) "2015-10-14 10:10:39"
  }
}

多个

  • 源代码
$items = [
    ['id' => 1, 'name' => 'b', 'age' =>  9, 'created_at' => '2015-10-10 10:10:00'],
    ['id' => 2, 'name' => 'a', 'age' =>  9, 'created_at' => '2015-10-10 10:10:10'],
    ['id' => 3, 'name' => 'z', 'age' =>  3, 'created_at' => '2015-10-10 10:10:20'],
    ['id' => 5, 'name' => 'f', 'age' => 11, 'created_at' => '2015-10-10 10:10:15'],
    ['id' => 4, 'name' => 'e', 'age' => 16, 'created_at' => '2015-10-10 10:10:20'],
    ['id' => 6, 'name' => 'o', 'age' => 15, 'created_at' => '2015-10-10 10:10:05']
];

$results = Rmtram\Sorter\Sorter::make($items)->sort([
    'age'        => 'asc',
    'created_at' => 'asc',
    'id'         => 'desc'
]);

var_dump($results);
  • 结果
array(6) {
  [0]=>
  array(4) {
    ["id"]=>
    int(3)
    ["name"]=>
    string(1) "z"
    ["age"]=>
    int(3)
    ["created_at"]=>
    string(19) "2015-10-10 10:10:20"
  }
  [1]=>
  array(4) {
    ["id"]=>
    int(1)
    ["name"]=>
    string(1) "b"
    ["age"]=>
    int(9)
    ["created_at"]=>
    string(19) "2015-10-10 10:10:00"
  }
  [2]=>
  array(4) {
    ["id"]=>
    int(2)
    ["name"]=>
    string(1) "a"
    ["age"]=>
    int(9)
    ["created_at"]=>
    string(19) "2015-10-10 10:10:10"
  }
  [3]=>
  array(4) {
    ["id"]=>
    int(5)
    ["name"]=>
    string(1) "f"
    ["age"]=>
    int(11)
    ["created_at"]=>
    string(19) "2015-10-10 10:10:15"
  }
  [4]=>
  array(4) {
    ["id"]=>
    int(6)
    ["name"]=>
    string(1) "o"
    ["age"]=>
    int(15)
    ["created_at"]=>
    string(19) "2015-10-10 10:10:05"
  }
  [5]=>
  array(4) {
    ["id"]=>
    int(4)
    ["name"]=>
    string(1) "e"
    ["age"]=>
    int(16)
    ["created_at"]=>
    string(19) "2015-10-10 10:10:20"
  }
}

select

单个

  • 源代码
$items = [
    ['id' => 1, 'name' => 'abc', 'created_at' => '2015-10-14 10:10:01'],
    ['id' => 2, 'name' => 'def', 'created_at' => '2015-10-14 10:10:05'],
    ['id' => 5, 'name' => 'mno', 'created_at' => '2015-10-14 10:10:39'],
    ['id' => 3, 'name' => 'ghi', 'created_at' => '2015-10-14 10:10:09']
];

$results = Rmtram\Sorter\Sorter::make($items)->refuse('age')->sort(['id' => 'asc']);

var_dump($results);
  • 结果
array(4) {
  [0]=>
  array(1) {
    ["id"]=>
    int(1)
  }
  [1]=>
  array(1) {
    ["id"]=>
    int(2)
  }
  [2]=>
  array(1) {
    ["id"]=>
    int(3)
  }
  [3]=>
  array(1) {
    ["id"]=>
    int(5)
  }
}

多个

  • 源代码
$items = [
    ['id' => 1, 'name' => 'abc', 'created_at' => '2015-10-14 10:10:01'],
    ['id' => 1, 'name' => 'bac', 'created_at' => '2015-10-14 10:10:01'],
    ['id' => 2, 'name' => 'def', 'created_at' => '2015-10-14 10:10:05'],
    ['id' => 5, 'name' => 'mno', 'created_at' => '2015-10-14 10:10:39'],
    ['id' => 3, 'name' => 'ghi', 'created_at' => '2015-10-14 10:10:09']
];

$sortedItems = Rmtram\Sorter\Sorter::make($items)->select(['id', 'name'])->sort(['id' => 'asc', 'name' => 'desc']);

var_dump($sortedItems);
  • 结果
array(5) {
  [0]=>
  array(2) {
    ["id"]=>
    int(1)
    ["name"]=>
    string(3) "bac"
  }
  [1]=>
  array(2) {
    ["id"]=>
    int(1)
    ["name"]=>
    string(3) "abc"
  }
  [2]=>
  array(2) {
    ["id"]=>
    int(2)
    ["name"]=>
    string(3) "def"
  }
  [3]=>
  array(2) {
    ["id"]=>
    int(3)
    ["name"]=>
    string(3) "ghi"
  }
  [4]=>
  array(2) {
    ["id"]=>
    int(5)
    ["name"]=>
    string(3) "mno"
  }
}

offset

Offset null === offset 0

!!! 重要 !!!

修改了偏移量的实现。

之前

offset(0) => 0
offset(1) => 0
offset(2) => 1
offset(3) => 2

之后

offset(0) => 0
offset(1) => 1
offset(2) => 2
offset(3) => 3
  • 源代码
$items = [
    ['id' => 1, 'name' => 'abc', 'created_at' => '2015-10-14 10:10:01'],
    ['id' => 2, 'name' => 'def', 'created_at' => '2015-10-14 10:10:05'],
    ['id' => 5, 'name' => 'mno', 'created_at' => '2015-10-14 10:10:39'],
    ['id' => 3, 'name' => 'ghi', 'created_at' => '2015-10-14 10:10:09']
];

$results = Rmtram\Sorter\Sorter::make($items)
    ->offset(3)
    ->sort(['id' => 'asc']);

var_dump($results);
  • 结果
array(1) {
  [0]=>
  array(3) {
    ["id"]=>
    int(5)
    ["name"]=>
    string(3) "mno"
    ["created_at"]=>
    string(19) "2015-10-14 10:10:39"
  }
}

limit

为 null 时不限制

  • 源代码
$items = [
    ['id' => 1, 'name' => 'abc', 'created_at' => '2015-10-14 10:10:01'],
    ['id' => 2, 'name' => 'def', 'created_at' => '2015-10-14 10:10:05'],
    ['id' => 5, 'name' => 'mno', 'created_at' => '2015-10-14 10:10:39'],
    ['id' => 3, 'name' => 'ghi', 'created_at' => '2015-10-14 10:10:09']
];

$results = Rmtram\Sorter\Sorter::make($items)
    ->limit(1)
    ->sort(['id' => 'asc']);

var_dump($results);
  • 结果
array(1) {
  [0]=>
  array(3) {
    ["id"]=>
    int(1)
    ["name"]=>
    string(3) "abc"
    ["created_at"]=>
    string(19) "2015-10-14 10:10:01"
  }
}

支持的版本。

  • PHP
    • 7.2
    • 7.3
    • 7.4

许可证

MIT 许可证 (MIT)

版权所有 © 2016 Rmtram

本软件及关联文档文件的副本(“软件”)的使用,免费授予任何获得副本的个人,用于在不加限制的情况下处理软件,包括但不限于使用、复制、修改、合并、发布、分发、再许可和/或销售软件副本,并允许向软件提供的人士进行上述操作,但需遵守以下条件

上述版权声明和本许可声明应包含在软件的所有副本或主要部分中。

软件按“现状”提供,不提供任何明示或暗示的保证,包括但不限于对适销性、针对特定目的的适用性和非侵权的保证。在任何情况下,作者或版权所有者均不对任何索赔、损害或其他责任负责,无论该责任是基于合同、侵权或其他方式,源于、因之而起或与此软件或软件的使用或其他交易有关。