version_compare для проверки основных и вспомогательных версий

Я хотел бы иметь такую ​​функцию, как PHP version_compare() которые позволяют мне сравнивать версию и учитывать младшие / основные номера версий.

Мой метод должен выглядеть так

function my_version_compare($new_version, $old_version, $operator, $only_minor = false){
...
return (bool) $do_update;
}

обновление основной версии от 2.1 в 2.2 например, в то время как несовершеннолетний из 2.1 в 2.1.1

my_version_compare('2.2', '2.1', '>', false); //true
my_version_compare('2.2', '2.1', '>', true); //false
my_version_compare('2.1.1', '2.1', '>', false); //true
my_version_compare('2.1.1', '2.1', '>', true); //true

В основном я хотел бы позволить пользователям решать, следует ли выполнять автоматическое обновление только на второстепенных версиях или в любом случае

То, что у меня сейчас есть, работает только с 2.x в 3.x обновления:

function my_version_compare($new_version, $old_version, $operator, $only_minor = false){
if($only_minor){
return (bool) version_compare($new_version, $old_version, $operator)
&& !version_compare(intval($new_version), intval($old_version), $operator);
}else{
return (bool) version_compare($new_version, $old_version, $operator);
}
}

0

Решение

После некоторой возни я придумал это:

function my_version_compare($new_version, $old_version, $operator, $only_minor = false){

$pos = 1; //position to indicate what's a major version (x.[x].x.x = 1)

if($only_minor){

//get parts as array and remove trailing zeros
$new = explode(".", rtrim($new_version, ".0"));
$old = explode(".", rtrim($old_version, ".0"));

//check if it's a major version update
$is_major_update = version_compare($new[$pos], $old[$pos], $operator) || version_compare(intval($new_version), intval($old_version), $operator);

//check if it's a minor update
$is_minor_update = (!$is_major_update && version_compare(strstr($new_version, '.'), strstr($old_version, '.'), $operator));

return $is_minor_update;
}

return version_compare($new_version, $old_version, $operator);

}

Не стесняйтесь улучшать этот фрагмент!

0

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]