Вопрос №4887 от пользователя Константин Кулишов в испытании «Сравнение версий»

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

Добрый день!

Пытался решить данную задачу через функцию 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 , может кто нибудь подскажет в чем проблема?

4 0

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

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

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

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

0

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

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

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; }
}
0

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

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

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

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

Anton Sh

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

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

Используйте Хекслет по максимуму!

  • Задавайте вопросы по уроку
  • Проверяйте знания в квизах
  • Проходите практику прямо в браузере
  • Отслеживайте свой прогресс

Зарегистрируйтесь или войдите в свой аккаунт

Даю согласие на обработку персональных данных, соглашаюсь с «Политикой конфиденциальности» и «Условиями оказания услуг»

Рекомендуемые программы

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

Иконка программы Фронтенд-разработчик
Профессия
Разработка фронтенд-компонентов веб-приложений
7 июля 10 месяцев
Иконка программы Python-разработчик
Профессия
Разработка веб-приложений на Django
7 июля 10 месяцев
Иконка программы PHP-разработчик
Профессия
Разработка веб-приложений на Laravel
7 июля 10 месяцев
Иконка программы Node.js-разработчик
Профессия
Разработка бэкенд-компонентов веб-приложений
7 июля 10 месяцев
Иконка программы Fullstack-разработчик
Профессия
Новый
Разработка фронтенд и бэкенд компонентов веб-приложений
7 июля 16 месяцев
Иконка программы Верстальщик
Профессия
Вёрстка с использованием последних стандартов CSS
в любое время 5 месяцев
Иконка программы Java-разработчик
Профессия
Разработка приложений на языке Java
7 июля 10 месяцев
Иконка программы Разработчик на Ruby on Rails
Профессия
Создает веб-приложения со скоростью света
7 июля 5 месяцев