Version compare: примеры (PHP)

Сравнение версий в PHP: работа с функцией version_compare
Раздел: Версии
version_compare(string version1, string version2 [, string operator]): mixed

Функция version_compare в PHP используется для сравнения двух строк с номерами версий. Она часто применяется при проверке требований к версии PHP, модулей или сторонних библиотек.

Аргументы функции

Функция имеет три параметра, последний из которых необязательный:

  • version1 (string) - первая строка с номером версии
  • version2 (string) - вторая строка с номером версии
  • operator (string) - необязательный оператор сравнения. Если указан, функция возвращает булево значение, иначе целое число

Строки версий могут содержать числа, точки, дефисы, буквы и символы плюс. Функция обрабатывает их в соответствии с правилами версионирования.

Примеры использования

Сравнение без оператора возвращает -1, 0 или 1:

echo version_compare('8.0.0', '7.4.0');
1

Сравнение с оператором возвращает true или false:

var_dump(version_compare('8.0.0', '7.4.0', '>'));
bool(true)

Работа с дополнительными символами:

echo version_compare('1.0-beta', '1.0-RC', '<');
bool(true)
Похожие функции в PHP

strcmp и strnatcmp выполняют строковое сравнение, но не учитывают специфику версионных номеров. Для простых числовых версий иногда используют explode с поразрядным сравнением.

Функция phpversion возвращает текущую версию PHP, которую затем можно сравнить с помощью version_compare.

Аналоги в других языках

Version compare в Python

from packaging import version
print(version.parse('2.3.1') > version.parse('2.3'))
True

Version compare в Javascript

console.log('1.2.3'.localeCompare('1.10.0', undefined, { numeric: true }));
-1

Version compare в MySQL

SELECT STRCMP('5.7.33', '8.0.0');
-1
Типичные ошибки

Сравнение строковых представлений без функции дает некорректный результат:

var_dump('8.0.0' > '7.4.0');
bool(false)

Неправильный формат оператора:

var_dump(version_compare('8.0', '7.4', 'больше'));
bool(false)
Изменения в PHP 8

В PHP 8 функция не претерпела значительных изменений. Сохраняется обратная совместимость с предыдущими версиями.

С PHP 8.0 улучшена обработка edge-cases, но поведение для стандартных случаев осталось прежним.

Расширенные примеры
Проверка диапазона версий
Пример php
$version = '7.3.5';
$min = '7.2.0';
$max = '7.4.0';
$in_range = version_compare($version, $min, '>=') && version_compare($version, $max, '<');
var_dump($in_range);
bool(true)
Сравнение версий с суффиксами
Пример php
echo version_compare('1.0.0-alpha.1', '1.0.0-alpha');
1
Массовое сравнение версий
Пример php
$versions = ['8.0.0', '7.4.0', '8.1.0'];
usort($versions, 'version_compare');
print_r($versions);
Array
(
    [0] => 7.4.0
    [1] => 8.0.0
    [2] => 8.1.0
)

PHP version_compare function comments

En
Version compare Compares two "PHP-standardized" version number strings