mirror of
https://gitee.com/hyperf/hyperf.git
synced 2024-12-02 03:37:44 +08:00
This reverts commit e76d97c10e
.
This commit is contained in:
parent
2ce026f9f3
commit
bcbc6f1d75
@ -2,10 +2,6 @@
|
|||||||
|
|
||||||
# v3.1.29 - 2024-07-04
|
# v3.1.29 - 2024-07-04
|
||||||
|
|
||||||
## Fixed
|
|
||||||
|
|
||||||
- [#6925](https://github.com/hyperf/hyperf/pull/6925) Fixed bug that `sortByMany` cannot support options like `sortBy`.
|
|
||||||
|
|
||||||
## Added
|
## Added
|
||||||
|
|
||||||
- [#6896](https://github.com/hyperf/hyperf/pull/6896) Added `SftpAdapter` for `hyperf/filesystem`.
|
- [#6896](https://github.com/hyperf/hyperf/pull/6896) Added `SftpAdapter` for `hyperf/filesystem`.
|
||||||
|
@ -1088,7 +1088,7 @@ class Collection implements Enumerable, ArrayAccess
|
|||||||
public function sortBy($callback, int $options = SORT_REGULAR, bool $descending = false): static
|
public function sortBy($callback, int $options = SORT_REGULAR, bool $descending = false): static
|
||||||
{
|
{
|
||||||
if (is_array($callback) && ! is_callable($callback)) {
|
if (is_array($callback) && ! is_callable($callback)) {
|
||||||
return $this->sortByMany($callback, $options);
|
return $this->sortByMany($callback);
|
||||||
}
|
}
|
||||||
|
|
||||||
$results = [];
|
$results = [];
|
||||||
@ -1112,21 +1112,11 @@ class Collection implements Enumerable, ArrayAccess
|
|||||||
/**
|
/**
|
||||||
* Sort the collection in descending order using the given callback.
|
* Sort the collection in descending order using the given callback.
|
||||||
*
|
*
|
||||||
* @param array|(callable(TValue, TKey): mixed)|string $callback
|
* @param (callable(TValue, TKey): mixed)|string $callback
|
||||||
* @return static<TKey, TValue>
|
* @return static<TKey, TValue>
|
||||||
*/
|
*/
|
||||||
public function sortByDesc($callback, int $options = SORT_REGULAR): static
|
public function sortByDesc($callback, int $options = SORT_REGULAR): static
|
||||||
{
|
{
|
||||||
if (is_array($callback) && ! is_callable($callback)) {
|
|
||||||
foreach ($callback as $index => $key) {
|
|
||||||
$comparison = Arr::wrap($key);
|
|
||||||
|
|
||||||
$comparison[1] = 'desc';
|
|
||||||
|
|
||||||
$callback[$index] = $comparison;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
return $this->sortBy($callback, $options, true);
|
return $this->sortBy($callback, $options, true);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -1599,11 +1589,11 @@ class Collection implements Enumerable, ArrayAccess
|
|||||||
*
|
*
|
||||||
* @return static
|
* @return static
|
||||||
*/
|
*/
|
||||||
protected function sortByMany(array $comparisons = [], int $options = SORT_REGULAR)
|
protected function sortByMany(array $comparisons = [])
|
||||||
{
|
{
|
||||||
$items = $this->items;
|
$items = $this->items;
|
||||||
|
|
||||||
uasort($items, function ($a, $b) use ($comparisons, $options) {
|
usort($items, function ($a, $b) use ($comparisons) {
|
||||||
foreach ($comparisons as $comparison) {
|
foreach ($comparisons as $comparison) {
|
||||||
$comparison = Arr::wrap($comparison);
|
$comparison = Arr::wrap($comparison);
|
||||||
|
|
||||||
@ -1621,21 +1611,7 @@ class Collection implements Enumerable, ArrayAccess
|
|||||||
$values = array_reverse($values);
|
$values = array_reverse($values);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (($options & SORT_FLAG_CASE) === SORT_FLAG_CASE) {
|
$result = $values[0] <=> $values[1];
|
||||||
if (($options & SORT_NATURAL) === SORT_NATURAL) {
|
|
||||||
$result = strnatcasecmp($values[0], $values[1]);
|
|
||||||
} else {
|
|
||||||
$result = strcasecmp($values[0], $values[1]);
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
$result = match ($options) {
|
|
||||||
SORT_NUMERIC => intval($values[0]) <=> intval($values[1]),
|
|
||||||
SORT_STRING => strcmp($values[0], $values[1]),
|
|
||||||
SORT_NATURAL => strnatcmp($values[0], $values[1]),
|
|
||||||
SORT_LOCALE_STRING => strcoll($values[0], $values[1]),
|
|
||||||
default => $values[0] <=> $values[1],
|
|
||||||
};
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
if ($result === 0) {
|
if ($result === 0) {
|
||||||
|
@ -1100,185 +1100,4 @@ class CollectionTest extends TestCase
|
|||||||
$c = new $collection(['foo' => 'bar', 1, 2, 3, 4, 5]);
|
$c = new $collection(['foo' => 'bar', 1, 2, 3, 4, 5]);
|
||||||
$this->assertNull($c->after(5));
|
$this->assertNull($c->after(5));
|
||||||
}
|
}
|
||||||
|
|
||||||
#[DataProvider('collectionClassProvider')]
|
|
||||||
public function testSortBy($collection)
|
|
||||||
{
|
|
||||||
$data = (new $collection(
|
|
||||||
[
|
|
||||||
['id' => 5, 'name' => 'e'],
|
|
||||||
['id' => 4, 'name' => 'd'],
|
|
||||||
['id' => 3, 'name' => 'c'],
|
|
||||||
['id' => 2, 'name' => 'b'],
|
|
||||||
['id' => 1, 'name' => 'a'],
|
|
||||||
]
|
|
||||||
))->sortBy('id');
|
|
||||||
$this->assertEquals(json_encode([
|
|
||||||
4 => ['id' => 1, 'name' => 'a'],
|
|
||||||
3 => ['id' => 2, 'name' => 'b'],
|
|
||||||
2 => ['id' => 3, 'name' => 'c'],
|
|
||||||
1 => ['id' => 4, 'name' => 'd'],
|
|
||||||
0 => ['id' => 5, 'name' => 'e'],
|
|
||||||
]), (string) $data);
|
|
||||||
$this->assertEquals(json_encode([
|
|
||||||
['id' => 1, 'name' => 'a'],
|
|
||||||
['id' => 2, 'name' => 'b'],
|
|
||||||
['id' => 3, 'name' => 'c'],
|
|
||||||
['id' => 4, 'name' => 'd'],
|
|
||||||
['id' => 5, 'name' => 'e'],
|
|
||||||
]), (string) $data->values());
|
|
||||||
$dataMany = (new $collection(
|
|
||||||
[
|
|
||||||
['id' => 5, 'name' => 'e'],
|
|
||||||
['id' => 4, 'name' => 'd'],
|
|
||||||
['id' => 3, 'name' => 'c'],
|
|
||||||
['id' => 2, 'name' => 'b'],
|
|
||||||
['id' => 1, 'name' => 'a'],
|
|
||||||
]
|
|
||||||
))->sortBy(['id', 'asc']);
|
|
||||||
$this->assertEquals((string) $data, (string) $dataMany);
|
|
||||||
|
|
||||||
$data = (new $collection(
|
|
||||||
[
|
|
||||||
['id' => 5, 'name' => '5a'],
|
|
||||||
['id' => 4, 'name' => '4b'],
|
|
||||||
['id' => 3, 'name' => 'c3'],
|
|
||||||
['id' => 2, 'name' => '2d'],
|
|
||||||
['id' => 1, 'name' => '1e'],
|
|
||||||
]
|
|
||||||
))->sortBy('name', SORT_NUMERIC);
|
|
||||||
$this->assertEquals(json_encode([
|
|
||||||
2 => ['id' => 3, 'name' => 'c3'],
|
|
||||||
4 => ['id' => 1, 'name' => '1e'],
|
|
||||||
3 => ['id' => 2, 'name' => '2d'],
|
|
||||||
1 => ['id' => 4, 'name' => '4b'],
|
|
||||||
0 => ['id' => 5, 'name' => '5a'],
|
|
||||||
]), (string) $data);
|
|
||||||
$dataMany = (new $collection(
|
|
||||||
[
|
|
||||||
['id' => 5, 'name' => '5a'],
|
|
||||||
['id' => 4, 'name' => '4b'],
|
|
||||||
['id' => 3, 'name' => 'c3'],
|
|
||||||
['id' => 2, 'name' => '2d'],
|
|
||||||
['id' => 1, 'name' => '1e'],
|
|
||||||
]
|
|
||||||
))->sortBy([['name', 'asc']], SORT_NUMERIC);
|
|
||||||
$this->assertEquals((string) $data, (string) $dataMany);
|
|
||||||
|
|
||||||
$data = (new $collection(
|
|
||||||
[
|
|
||||||
['id' => 5, 'name' => '5a'],
|
|
||||||
['id' => 4, 'name' => '4b'],
|
|
||||||
['id' => 3, 'name' => 'c3'],
|
|
||||||
['id' => 2, 'name' => '2d'],
|
|
||||||
['id' => 1, 'name' => '1e'],
|
|
||||||
]
|
|
||||||
))->sortBy('name', SORT_STRING);
|
|
||||||
$this->assertEquals(json_encode([
|
|
||||||
4 => ['id' => 1, 'name' => '1e'],
|
|
||||||
3 => ['id' => 2, 'name' => '2d'],
|
|
||||||
1 => ['id' => 4, 'name' => '4b'],
|
|
||||||
0 => ['id' => 5, 'name' => '5a'],
|
|
||||||
2 => ['id' => 3, 'name' => 'c3'],
|
|
||||||
]), (string) $data);
|
|
||||||
$dataMany = (new $collection(
|
|
||||||
[
|
|
||||||
['id' => 5, 'name' => '5a'],
|
|
||||||
['id' => 4, 'name' => '4b'],
|
|
||||||
['id' => 3, 'name' => 'c3'],
|
|
||||||
['id' => 2, 'name' => '2d'],
|
|
||||||
['id' => 1, 'name' => '1e'],
|
|
||||||
]
|
|
||||||
))->sortBy([['name', 'asc']], SORT_STRING);
|
|
||||||
$this->assertEquals((string) $data, (string) $dataMany);
|
|
||||||
|
|
||||||
$data = (new $collection(
|
|
||||||
[
|
|
||||||
['id' => 5, 'name' => 'a10'],
|
|
||||||
['id' => 4, 'name' => 'a4'],
|
|
||||||
['id' => 3, 'name' => 'a3'],
|
|
||||||
['id' => 2, 'name' => 'a2'],
|
|
||||||
['id' => 1, 'name' => 'a1'],
|
|
||||||
]
|
|
||||||
))->sortBy('name', SORT_NATURAL);
|
|
||||||
$this->assertEquals(json_encode([
|
|
||||||
4 => ['id' => 1, 'name' => 'a1'],
|
|
||||||
3 => ['id' => 2, 'name' => 'a2'],
|
|
||||||
2 => ['id' => 3, 'name' => 'a3'],
|
|
||||||
1 => ['id' => 4, 'name' => 'a4'],
|
|
||||||
0 => ['id' => 5, 'name' => 'a10'],
|
|
||||||
]), (string) $data);
|
|
||||||
$dataMany = (new $collection(
|
|
||||||
[
|
|
||||||
['id' => 5, 'name' => 'a10'],
|
|
||||||
['id' => 4, 'name' => 'a4'],
|
|
||||||
['id' => 3, 'name' => 'a3'],
|
|
||||||
['id' => 2, 'name' => 'a2'],
|
|
||||||
['id' => 1, 'name' => 'a1'],
|
|
||||||
]
|
|
||||||
))->sortBy([['name', 'asc']], SORT_NATURAL);
|
|
||||||
$this->assertEquals((string) $data, (string) $dataMany);
|
|
||||||
|
|
||||||
setlocale(LC_COLLATE, 'en_US.utf8');
|
|
||||||
$data = (new $collection(
|
|
||||||
[
|
|
||||||
['id' => 5, 'name' => 'A'],
|
|
||||||
['id' => 4, 'name' => 'a'],
|
|
||||||
['id' => 3, 'name' => 'B'],
|
|
||||||
['id' => 2, 'name' => 'b'],
|
|
||||||
['id' => 1, 'name' => 'c'],
|
|
||||||
]
|
|
||||||
))->sortBy('name', SORT_LOCALE_STRING);
|
|
||||||
$this->assertEquals(json_encode([
|
|
||||||
1 => ['id' => 4, 'name' => 'a'],
|
|
||||||
0 => ['id' => 5, 'name' => 'A'],
|
|
||||||
3 => ['id' => 2, 'name' => 'b'],
|
|
||||||
2 => ['id' => 3, 'name' => 'B'],
|
|
||||||
4 => ['id' => 1, 'name' => 'c'],
|
|
||||||
]), (string) $data);
|
|
||||||
$dataMany = (new $collection(
|
|
||||||
[
|
|
||||||
['id' => 5, 'name' => 'A'],
|
|
||||||
['id' => 4, 'name' => 'a'],
|
|
||||||
['id' => 3, 'name' => 'B'],
|
|
||||||
['id' => 2, 'name' => 'b'],
|
|
||||||
['id' => 1, 'name' => 'c'],
|
|
||||||
]
|
|
||||||
))->sortBy([['name', 'asc']], SORT_LOCALE_STRING);
|
|
||||||
$this->assertEquals((string) $data, (string) $dataMany);
|
|
||||||
|
|
||||||
$data = (new $collection(
|
|
||||||
[
|
|
||||||
['id' => 1, 'name' => 'a'],
|
|
||||||
['id' => 2, 'name' => 'b'],
|
|
||||||
['id' => 3, 'name' => 'c'],
|
|
||||||
['id' => 4, 'name' => 'd'],
|
|
||||||
['id' => 5, 'name' => 'e'],
|
|
||||||
]
|
|
||||||
))->sortByDesc('id');
|
|
||||||
$this->assertEquals(json_encode([
|
|
||||||
4 => ['id' => 5, 'name' => 'e'],
|
|
||||||
3 => ['id' => 4, 'name' => 'd'],
|
|
||||||
2 => ['id' => 3, 'name' => 'c'],
|
|
||||||
1 => ['id' => 2, 'name' => 'b'],
|
|
||||||
0 => ['id' => 1, 'name' => 'a'],
|
|
||||||
]), (string) $data);
|
|
||||||
$this->assertEquals(json_encode([
|
|
||||||
['id' => 5, 'name' => 'e'],
|
|
||||||
['id' => 4, 'name' => 'd'],
|
|
||||||
['id' => 3, 'name' => 'c'],
|
|
||||||
['id' => 2, 'name' => 'b'],
|
|
||||||
['id' => 1, 'name' => 'a'],
|
|
||||||
]), (string) $data->values());
|
|
||||||
$dataMany = (new $collection(
|
|
||||||
[
|
|
||||||
['id' => 1, 'name' => 'a'],
|
|
||||||
['id' => 2, 'name' => 'b'],
|
|
||||||
['id' => 3, 'name' => 'c'],
|
|
||||||
['id' => 4, 'name' => 'd'],
|
|
||||||
['id' => 5, 'name' => 'e'],
|
|
||||||
]
|
|
||||||
))->sortByDesc(['id']);
|
|
||||||
$this->assertEquals((string) $data, (string) $dataMany);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user