Version compare: примеры (PHP)
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)
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.0 улучшена обработка edge-cases, но поведение для стандартных случаев осталось прежним.
$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)
echo version_compare('1.0.0-alpha.1', '1.0.0-alpha');1
$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
)