PHP: Массивы

Сравнение версий

Константин Кулишов

Добрый день!

Пытался решить данную задачу через функцию compareVersion (думал пойти самым простым путем), реализовал так:

function compareVersion ($version1, $version2) { if (version_compare($version1, $version2, '>')) { return 1; } elseif ('<') { return -1; } elseif ('==') { return 0; } else { return 0; } }

Все это тестил через https://repl.it/languages/php , с помощью var_dump . Вообщем все хорошо сравнивает, НО при сравнении индентичной версии 1.1 , 1,1 выдает мне -1 , может кто нибудь подскажет в чем проблема?

Роман Лахтадыр

elseif ('<') { return -1; }

вы передаете строку в условие вместо выражения, поэтому там всегда true;

у вас первое условие указано верно, а следующие - нет.

Константин Кулишов

Спасибо!Действительно при таких условиях отрабатывает верно:

function compareVersion ($version1, $version2) { if (version_compare($version1, $version2, '>')) { return 1; } elseif (version_compare($version1, $version2, '<')) { return -1; } elseif (version_compare($version1, $version2, '=')) { return 0; } else { return 0; } }

Anton Sh

Мое решение такое

function compareVersion($ver1, $ver2) { $versArr1 = explode(".", $ver1); $versArr2 = explode(".", $ver2); return ($versArr1[1] <=> $versArr2[1]) <=> ($versArr1[0] <=> $versArr2[0]); }

Станислав Виноградов

Константин Кулишов,

Какое-то странное решение, еще и отмечено как решение. Что мешает вот так написать-то?

function compareVersion(string $version1, string $version2): bool { return version_compare($version1, $version2); }