In case you need to handle more complex version numbers like alpha, beta,..., here is a little something that can help:function multiExplode($delimiters,$string){    $pattern = '/['.preg_quote($delimiters).']/';    return(preg_split( $pattern, $string ));}function isInteger($input){    return(ctype_digit(strval($input)));}function keepIntsStartArray($arr){    $nonIntMappings=[        "alpha"=>1,        "beta"=>2,        "gamma"=>3,        "delta"=>4,        "epsilon"=>5,        "zeta"=>6,        "eta"=>7,        "theta"=>8,        "iota"=>9,        "kappa"=>10,        "lambda"=>11,        "mu"=>12,        "nu"=>13,        "xi"=>14,        "omicron"=>15,        "pi"=>16,        "rho"=>17,        "sigma"=>18,        "tau"=>19,        "upsilon"=>20,        "phi"=>21,        "chi"=>22,        "psi"=>23,        "omega"=>24,    ];    $ret=[];    foreach($arr as $i){        if(!isInteger($i)){            if(!array_key_exists($i,$nonIntMappings)){                break;            }            $ret[]=$nonIntMappings[$i];        }        $ret[]=$i;    }    return($ret);}function appVersionBigger($v1,$v2,$orEqual=false){    $delimiters=".-+";    $a1=keepIntsStartArray(multiExplode($delimiters,$v1));    $a2=keepIntsStartArray(multiExplode($delimiters,$v2));    $len=count($a1);    if($len>count($a2)){        $len=count($a2);    }    for($i=0;$i<$len;$i++){        $n1=$a1[$i];        $n2=$a2[$i];        if($n1>$n2){            return(true);        }        if($n1<$n2){            return(false);        }    }    if(count($a1)>count($a2)){        return(true);    }    if(count($a1)<count($a2)){        return(false);    }    return($orEqual);}// usage examples:$versions=[    "1.2.3-45"=>"1.2.3-45",    "1.2.3-44"=>"1.2.3-45",    "1.2.3-46"=>"1.2.3-45",    "1.2.3"=>"1.2.3-45",    "1.2.4"=>"1.2.3-45",    "1.2.2"=>"1.2.3-45",    "1.2"=>"1.2.3-45",    "1.3"=>"1.2.3-45",    "1.2.3-ios"=>"1.2.3-and",    "1.2-ios"=>"1.2.3-and",    "2-ios"=>"1.2.3-and",    "1.2.3-alpha"=>"1.2.3-beta",    "1.2.3-beta"=>"1.2.3-alpha",    "1-gamma"=>"1.2.3-beta",    "1-alpha"=>"1.2.3-beta",];foreach($versions as $v1=>$v2){    echo("v1: ".$v1."\tv2: ".$v2."\tgt: ".(appVersionBigger($v1,$v2,false)?"true":"false")."\tge: ".(appVersionBigger($v1,$v2,true)?"true":"false")."\n");}// output with php version 8.1.8:/*v1: 1.2.3-45    v2: 1.2.3-45    gt: false    ge: truev1: 1.2.3-44    v2: 1.2.3-45    gt: false    ge: falsev1: 1.2.3-46    v2: 1.2.3-45    gt: true    ge: truev1: 1.2.3    v2: 1.2.3-45    gt: false    ge: falsev1: 1.2.4    v2: 1.2.3-45    gt: true    ge: truev1: 1.2.2    v2: 1.2.3-45    gt: false    ge: falsev1: 1.2    v2: 1.2.3-45    gt: false    ge: falsev1: 1.3    v2: 1.2.3-45    gt: true    ge: truev1: 1.2.3-ios    v2: 1.2.3-and    gt: false    ge: truev1: 1.2-ios    v2: 1.2.3-and    gt: false    ge: falsev1: 2-ios    v2: 1.2.3-and    gt: true    ge: truev1: 1.2.3-alpha    v2: 1.2.3-beta    gt: false    ge: falsev1: 1.2.3-beta    v2: 1.2.3-alpha    gt: true    ge: truev1: 1-gamma    v2: 1.2.3-beta    gt: true    ge: truev1: 1-alpha    v2: 1.2.3-beta    gt: false    ge: false*/