Вопрос №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 , может кто нибудь подскажет в чем проблема?
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; }
}
Константин Кулишов,
Какое-то странное решение, еще и отмечено как решение. Что мешает вот так написать-то?
function compareVersion(string $version1, string $version2): bool
{
return version_compare($version1, $version2);
}
Мое решение такое
function compareVersion($ver1, $ver2) {
$versArr1 = explode(".", $ver1);
$versArr2 = explode(".", $ver2);
return ($versArr1[1] <=> $versArr2[1]) <=> ($versArr1[0] <=> $versArr2[0]);
}
Используйте Хекслет по максимуму!
- Задавайте вопросы по уроку
- Проверяйте знания в квизах
- Проходите практику прямо в браузере
- Отслеживайте свой прогресс
Зарегистрируйтесь или войдите в свой аккаунт
С нуля до разработчика. Возвращаем деньги, если не удалось найти работу.







