<MyRusakov.ru />

Профессия Web-разработчик

Профессия Web-разработчик

Этот комплект за 8 месяцев превратит Вас в Web-разработчика с нуля. Учиться достаточно 1 час в день.

Начнёте Вы с HTML, CSS и вёрстки сайтов. Потом перейдёте к программированию и JavaScript. Затем изучите PHP, MySQL, SQL, Python. Изучите Web-фреймворки Laravel и Django. Создадите 5 своих сайтов для портфолио.

Комплект содержит:

- 540 видеоуроков

- 110 часов видео

- 1205 заданий для закрепления материала из уроков

- 5 финальных тестов

- 7 сертификатов

- 12 Бонусных курсов

Подробнее
Подписка

Подпишитесь на мой канал на YouTube, где я регулярно публикую новые видео.

YouTube Подписаться

Подписавшись по E-mail, Вы будете получать уведомления о новых статьях.

Подписка Подписаться

Добавляйтесь ко мне в друзья ВКонтакте! Отзывы о сайте и обо мне оставляйте в моей группе.

Мой аккаунт Мой аккаунт Моя группа
Опрос

Какая тема Вас интересует больше?

Оператор <=> в PHP: сортировка и сравнение значений простыми словами

Оператор <=> в PHP: сортировка и сравнение значений простыми словами

Если вы искали, что такое оператор <=> в PHP и зачем он нужен, короткий ответ такой: это удобный оператор сравнения, который возвращает -1, 0 или 1. Чаще всего он используется для сортировки данных: товаров по цене, пользователей по возрасту, статей по дате и так далее.

Что делает оператор <=> в PHP

Оператор <=> сравнивает левое и правое значение:

  • возвращает -1, если левое значение меньше правого;
  • возвращает 0, если значения равны;
  • возвращает 1, если левое значение больше правого.

Простой пример:

echo 10 <=> 20; // -1
echo 20 <=> 20; // 0
echo 30 <=> 20; // 1

Название spaceship operator появилось из-за внешнего вида оператора: он действительно немного похож на космический корабль.

Зачем он нужен, если есть >, < и ==

Обычные операторы сравнения отвечают на вопрос «да или нет». Например, 10 > 5 вернёт true. А оператор <=> сразу сообщает порядок двух значений: меньше, равно или больше.

Без него код сравнения выглядел бы так:

function compareNumbers(int $a, int $b): int {
    if ($a == $b) {
        return 0;
    }

    return ($a < $b) ? -1 : 1;
}

С оператором <=> то же самое записывается в одну строку:

function compareNumbers(int $a, int $b): int {
    return $a <=> $b;
}

Сортировка чисел через usort()

Самый частый практический сценарий — сортировка массива. Функция usort() принимает массив и callback-функцию сравнения. Эта функция как раз должна вернуть отрицательное число, ноль или положительное число.

$prices = [300, 100, 500, 200];

usort($prices, function ($a, $b) {
    return $a <=> $b;
});

print_r($prices);
// [100, 200, 300, 500]

Для сортировки по убыванию достаточно поменять значения местами:

$prices = [300, 100, 500, 200];

usort($prices, function ($a, $b) {
    return $b <=> $a;
});

print_r($prices);
// [500, 300, 200, 100]

Сортировка массива пользователей по возрасту

Оператор <=> особенно удобен при работе с массивами ассоциативных массивов. Например, отсортируем пользователей по возрасту:

$users = [
    ['name' => 'Анна', 'age' => 25],
    ['name' => 'Иван', 'age' => 19],
    ['name' => 'Олег', 'age' => 32],
];

usort($users, function ($a, $b) {
    return $a['age'] <=> $b['age'];
});

print_r($users);

Результат: сначала Иван, затем Анна, затем Олег.

В PHP 7.4+ можно записать короче с помощью стрелочной функции:

usort($users, fn($a, $b) => $a['age'] <=> $b['age']);

Сортировка по нескольким полям

Иногда нужно сортировать не только по одному критерию. Например, сначала по возрасту, а если возраст одинаковый — по имени.

$users = [
    ['name' => 'Олег', 'age' => 25],
    ['name' => 'Анна', 'age' => 25],
    ['name' => 'Иван', 'age' => 19],
];

usort($users, function ($a, $b) {
    return ($a['age'] <=> $b['age'])
        ?: ($a['name'] <=> $b['name']);
});

print_r($users);

Здесь используется сокращённый оператор ?:. Если сравнение возраста вернуло не 0, PHP сразу использует этот результат. Если возраст одинаковый, выполняется сравнение имён.

Сравнение строк

Оператор <=> можно применять и к строкам:

echo 'apple' <=> 'banana'; // -1
echo 'cat' <=> 'cat';     // 0
echo 'dog' <=> 'cat';     // 1

Но важно понимать: строковое сравнение зависит от правил PHP и не всегда подходит для красивой сортировки русских слов или сортировки «как в словаре». Для сложной локализованной сортировки лучше использовать расширение intl и класс Collator, если оно доступно.

Сортировка товаров по цене и названию

Рассмотрим более реальный пример: список товаров нужно отсортировать по цене, а товары с одинаковой ценой — по названию.

$products = [
    ['title' => 'Клавиатура', 'price' => 2500],
    ['title' => 'Мышь', 'price' => 1200],
    ['title' => 'Коврик', 'price' => 1200],
    ['title' => 'Монитор', 'price' => 15000],
];

usort($products, function ($a, $b) {
    return ($a['price'] <=> $b['price'])
        ?: ($a['title'] <=> $b['title']);
});

foreach ($products as $product) {
    echo $product['title'] . ': ' . $product['price'] . PHP_EOL;
}

Такой подход часто встречается в интернет-магазинах, админках, каталогах и личных кабинетах.

Важный нюанс: типы данных

Оператор <=> использует обычные правила сравнения PHP. Это значит, что смешивание типов может дать неожиданный результат, особенно если сравнивать числа и строки.

var_dump('10' <=> 2);   // 1, строка '10' будет сравнена как число
var_dump('abc' <=> 2);  // результат зависит от правил сравнения строк и чисел

Практический совет: перед сортировкой приводите данные к ожидаемому типу. Если цена должна быть числом — сделайте её числом заранее.

$aPrice = (float) $a['price'];
$bPrice = (float) $b['price'];

return $aPrice <=> $bPrice;

Сравнение дат

Если даты хранятся в формате Y-m-d, их можно сравнивать как строки, потому что такой формат сортируется корректно:

$posts = [
    ['title' => 'Новость 1', 'date' => '2026-01-10'],
    ['title' => 'Новость 2', 'date' => '2025-12-01'],
    ['title' => 'Новость 3', 'date' => '2026-02-15'],
];

usort($posts, fn($a, $b) => $b['date'] <=> $a['date']);

print_r($posts);

Если дата хранится в другом формате, например 10.01.2026, лучше сначала преобразовать её через strtotime() или DateTime.

Частые ошибки новичков

  • Путать направление сортировки. Для возрастания используйте $a <=> $b, для убывания — $b <=> $a.
  • Сравнивать неподготовленные данные. Строки с ценами, пустые значения и null лучше обработать заранее.
  • Ожидать true или false. Оператор возвращает не булево значение, а число: -1, 0 или 1.
  • Использовать для сложной сортировки текста. Для языковой сортировки русских строк может понадобиться Collator.

Мини-шпаргалка

// По возрастанию
usort($items, fn($a, $b) => $a <=> $b);

// По убыванию
usort($items, fn($a, $b) => $b <=> $a);

// По полю массива
usort($users, fn($a, $b) => $a['age'] <=> $b['age']);

// По двум полям
usort($users, fn($a, $b) =>
    ($a['age'] <=> $b['age']) ?: ($a['name'] <=> $b['name'])
);

Если вы хотите не просто запомнить отдельные операторы, а уверенно писать полноценные сайты на PHP с базой данных, формами, авторизацией и практическими проектами, посмотрите курс «PHP и MySQL с Нуля до Гуру 3.0» — понятный путь от основ к реальной разработке.

Итог

Оператор <=> в PHP — простой, но очень полезный инструмент. Он делает функции сравнения короче и особенно хорошо раскрывается вместе с usort(). Используйте его для сортировки чисел, строк, массивов объектов или ассоциативных массивов, но не забывайте следить за типами данных и форматом значений.

Копирование материалов разрешается только с указанием автора (Михаил Русаков) и индексируемой прямой ссылкой на сайт (https://myrusakov.ru)!

Добавляйтесь ко мне в друзья ВКонтакте: https://vk.com/myrusakov.
Если Вы хотите дать оценку мне и моей работе, то напишите её в моей группе: https://vk.com/rusakovmy.

Если Вы не хотите пропустить новые материалы на сайте,
то Вы можете подписаться на обновления: Подписаться на обновления

Если у Вас остались какие-либо вопросы, либо у Вас есть желание высказаться по поводу этой статьи, то Вы можете оставить свой комментарий внизу страницы.

Порекомендуйте эту статью друзьям:

Если Вам понравился сайт, то разместите ссылку на него (у себя на сайте, на форуме, в контакте):

  1. Кнопка:

    Она выглядит вот так: Как создать свой сайт

  2. Текстовая ссылка:

    Она выглядит вот так: Как создать свой сайт

  3. BB-код ссылки для форумов (например, можете поставить её в подписи):

Комментарии (0):

Для добавления комментариев надо войти в систему.
Если Вы ещё не зарегистрированы на сайте, то сначала зарегистрируйтесь.