Метод sortBy
Метод sortBy применяется к коллекции и возвращает новую коллекцию, отсортированную в порядке возрастания по указанному ключу. Первым параметром передаётся ключ или callback-функция, второй параметр определяет порядок сортировки (по умолчанию SORT_REGULAR).
Синтаксис
<?php
$collection->sortBy($key, $options = SORT_REGULAR);
?>
Пример
Давайте отсортируем коллекцию чисел по возрастанию:
<?php
use Illuminate\Support\Collection;
$collection = collect([5, 1, 4, 2, 3]);
$res = $collection->sortBy(function ($value) {
return $value;
})->values()->all();
print_r($res);
?>
Результат выполнения кода:
[1, 2, 3, 4, 5]
Пример
Отсортируем коллекцию ассоциативных массивов по полю 'age':
<?php
use Illuminate\Support\Collection;
$users = collect([
['name' => 'Alice', 'age' => 30],
['name' => 'Bob', 'age' => 25],
['name' => 'Charlie', 'age' => 35],
]);
$res = $users->sortBy('age')->values()->all();
print_r($res);
?>
Результат выполнения кода:
[
["name" => "Bob", "age" => 25],
["name" => "Alice", "age" => 30],
["name" => "Charlie", "age" => 35]
]
Пример
Используем callback-функцию для сортировки по длине строки:
<?php
use Illuminate\Support\Collection;
$words = collect(['banana', 'apple', 'cherry', 'date']);
$res = $words->sortBy(function ($value) {
return strlen($value);
})->values()->all();
print_r($res);
?>
Результат выполнения кода:
["date", "apple", "banana", "cherry"]
Пример
Сортируем коллекцию объектов по свойству 'created_at':
<?php
use Illuminate\Support\Collection;
use App\Models\User;
$users = User::all();
$res = $users->sortBy('created_at')->values()->all();
foreach ($res as $user) {
echo $user->name . " - " . $user->created_at . "\n";
}
?>
Результат выполнения кода:
"John - 2023-01-15 10:00:00"
"Jane - 2023-02-20 14:30:00"
"Bob - 2023-03-10 09:15:00"
Пример
Сортировка с использованием вложенных ключей через точку:
<?php
use Illuminate\Support\Collection;
$users = collect([
['name' => 'Alice', 'profile' => ['rating' => 4.5]],
['name' => 'Bob', 'profile' => ['rating' => 4.8]],
['name' => 'Charlie', 'profile' => ['rating' => 4.2]],
]);
$res = $users->sortBy('profile.rating')->values()->all();
print_r($res);
?>
Результат выполнения кода:
[
["name" => "Charlie", "profile" => ["rating" => 4.2]],
["name" => "Alice", "profile" => ["rating" => 4.5]],
["name" => "Bob", "profile" => ["rating" => 4.8]]
]
Пример
Сортировка коллекции с сохранением ключей (без вызова values):
<?php
use Illuminate\Support\Collection;
$collection = collect([
'first' => 10,
'second' => 5,
'third' => 8,
'fourth' => 3,
]);
$res = $collection->sortBy(function ($value) {
return $value;
})->all();
print_r($res);
?>
Результат выполнения кода:
[
"fourth" => 3,
"second" => 5,
"third" => 8,
"first" => 10
]
Смотрите также
-
метод
sortByDesc,
который сортирует коллекцию в порядке убывания -
метод
sort,
который сортирует коллекцию по значениям -
метод
groupBy,
который группирует элементы коллекции по заданному ключу -
метод
filter,
который фильтрует коллекцию по заданному условию