Sort: примеры (PHP)
sort(array &array [, int flags]): boolФункция sort осуществляет сортировку массива по возрастанию значений. Основное применение - упорядочивание элементов массива, когда не требуется сохранение связи ключ-значение. После выполнения функции индексы массива сбрасываются и начинаются с нуля.
array &$array - передаваемый по ссылке массив для сортировки. Изменяется непосредственно.
int $flags - необязательный параметр, определяющий тип сравнения элементов. Доступные константы:
- SORT_REGULAR - обычное сравнение (по умолчанию)
- SORT_NUMERIC - числовое сравнение
- SORT_STRING - строковое сравнение
- SORT_LOCALE_STRING - строковое сравнение с учетом локали
- SORT_NATURAL - естественное упорядочивание
- SORT_FLAG_CASE - может комбинироваться с SORT_STRING или SORT_NATURAL для регистронезависимой сортировки
Функция возвращает true при успешном выполнении и false при возникновении ошибки.
<?php
$numbers = [3, 1, 4, 1, 5, 9, 2];
sort($numbers);
print_r($numbers);
?>Array
(
[0] => 1
[1] => 1
[2] => 2
[3] => 3
[4] => 4
[5] => 5
[6] => 9
)<?php
$fruits = ["лимон", "апельсин", "банан", "яблоко"];
sort($fruits, SORT_STRING);
print_r($fruits);
?>Array
(
[0] => апельсин
[1] => банан
[2] => лимон
[3] => яблоко
)<?php
$items = ["item1", "item10", "item2", "item20"];
sort($items, SORT_NATURAL);
print_r($items);
?>Array
(
[0] => item1
[1] => item2
[2] => item10
[3] => item20
)<?php
setlocale(LC_COLLATE, 'ru_RU.UTF-8');
$words = ["ёлка", "ель", "яблоко", "азбука"];
sort($words, SORT_LOCALE_STRING);
print_r($words);
?>Array
(
[0] => азбука
[1] => ель
[2] => ёлка
[3] => яблоко
)Сохраняет ассоциацию ключ-значение при сортировке. Применяется для ассоциативных массивов.
Выполняет обратную сортировку массива по убыванию значений.
Производит сортировку с использованием пользовательской функции сравнения. Дает полный контроль над процессом сортировки.
Сортирует массив по ключам с сохранением ассоциации.
Реализует естественную сортировку с сохранением ключей.
sort оптимальна для индексированных массивов без необходимости сохранять ключи. asort применяется для ассоциативных массивов. usort используется для сложных критериев сортировки. natsort подходит для строк, содержащих числа.
<?php
$data = ["name" => "Иван", "age" => 25, "city" => "Москва"];
sort($data);
print_r($data);
?>Array
(
[0] => 25
[1] => Москва
[2] => Иван
)После сортировки теряются ключи массива. Для сохранения ключей следует использовать asort.
<?php
$mixed = [10, "5", 3, "12"];
sort($mixed, SORT_STRING);
print_r($mixed);
?>Array
(
[0] => 10
[1] => 12
[2] => 3
[3] => 5
)При строковой сортировке числа сравниваются как строки, что дает неожиданные результаты. Для числовой сортировки нужно использовать SORT_NUMERIC.
<?php
$string = "текст";
$result = sort($string);
var_dump($result);
?>Warning: sort() expects parameter 1 to be array, string given bool(false)
Функция работает только с массивами. Для других типов данных возникает предупреждение.
Изменен внутренний алгоритм сортировки. Теперь используется stable sorting (устойчивая сортировка), которая сохраняет относительный порядок равных элементов. Ранее порядок равных элементов мог меняться.
<?php
$data = [
['name' => 'Иван', 'age' => 25],
['name' => 'Петр', 'age' => 30],
['name' => 'Анна', 'age' => 25]
];
usort($data, function($a, $b) {
return $a['age'] <=> $b['age'];
});
print_r($data);
?>В PHP 8.0 и выше порядок записей с одинаковым возрастом (25 лет) сохраняется.
Добавлена поддержка константы SORT_FLAG_CASE, которая может комбинироваться с SORT_STRING или SORT_NATURAL для регистронезависимой сортировки.
<?php
$users = [
['имя' => 'Мария', 'возраст' => 28],
['имя' => 'Алексей', 'возраст' => 22],
['имя' => 'Ольга', 'возраст' => 28],
['имя' => 'Иван', 'возраст' => 35]
];
// Создаем временный массив для сортировки
$ages = [];
foreach ($users as $key => $user) {
$ages[$key] = $user['возраст'];
}
// Сортируем основной массив по временному
array_multisort($ages, SORT_ASC, $users);
print_r($users);
?>Array
(
[0] => Array
(
[имя] => Алексей
[возраст] => 22
)
[1] => Array
(
[имя] => Мария
[возраст] => 28
)
[2] => Array
(
[имя] => Ольга
[возраст] => 28
)
[3] => Array
(
[имя] => Иван
[возраст] => 35
)
)<?php
$products = [
['name' => 'Ноутбук', 'price' => 50000, 'rating' => 4.5],
['name' => 'Телефон', 'price' => 30000, 'rating' => 4.7],
['name' => 'Планшет', 'price' => 25000, 'rating' => 4.3]
];
usort($products, function($a, $b) {
// Сначала по рейтингу (убывание), потом по цене (возрастание)
if ($b['rating'] != $a['rating']) {
return $b['rating'] <=> $a['rating'];
}
return $a['price'] <=> $b['price'];
});
print_r($products);
?>Array
(
[0] => Array
(
[name] => Телефон
[price] => 30000
[rating] => 4.7
)
[1] => Array
(
[name] => Ноутбук
[price] => 50000
[rating] => 4.5
)
[2] => Array
(
[name] => Планшет
[price] => 25000
[rating] => 4.3
)
)<?php
class User {
public function __construct(public string $name, public int $age) {}
}
$users = [
new User('Ирина', 28),
new User('Андрей', 22),
new User('Сергей', 31)
];
usort($users, function($a, $b) {
return $a->age <=> $b->age;
});
foreach ($users as $user) {
echo $user->name . ': ' . $user->age . "\n";
}
?>Андрей: 22 Ирина: 28 Сергей: 31
<?php
$files = ["File10.txt", "file2.txt", "FILE1.txt", "file20.txt"];
sort($files, SORT_NATURAL | SORT_FLAG_CASE);
print_r($files);
?>Array
(
[0] => FILE1.txt
[1] => file2.txt
[2] => File10.txt
[3] => file20.txt
)Sort в Python
# Сортировка списка
numbers = [3, 1, 4, 1, 5]
numbers.sort()
print(numbers) # [1, 1, 3, 4, 5]
# Создание нового отсортированного списка
sorted_numbers = sorted([3, 1, 4, 1, 5])
print(sorted_numbers) # [1, 1, 3, 4, 5]Python предлагает методы sort() для сортировки на месте и sorted() для создания новой отсортированной коллекции.
Sort в Javascript
// Сортировка массива
let numbers = [3, 1, 4, 1, 5, 9];
numbers.sort((a, b) => a - b);
console.log(numbers); // [1, 1, 3, 4, 5, 9]
// Сортировка строк
let fruits = ["лимон", "апельсин", "банан"];
fruits.sort();
console.log(fruits); // ["апельсин", "банан", "лимон"]Метод sort() в JavaScript по умолчанию выполняет лексикографическую сортировку. Для числовой сортировки требуется функция сравнения.
Sort в MySQL
SELECT name, price FROM products
ORDER BY price ASC;
-- Сортировка по нескольким полям
SELECT name, category, price FROM products
ORDER BY category, price DESC;В SQL сортировка осуществляется через оператор ORDER BY в запросах SELECT, что принципиально отличается от подхода PHP.