/** * Checks ifa given string is greater than another * @param string|version $v1 The first version * @param string|version $v2 The second version * @return boolean */ public static function gt($v1, $v2) { if (!$v1 instanceof version) { $v1 = new version($v1); } if (!$v2 instanceof version) { $v2 = new version($v2); } // Major version number $ma1 = $v1->getMajor(); $ma2 = $v2->getMajor(); if ($ma1 < 0 && $ma2 >= 0) { return false; } if ($ma1 >= 0 && $ma2 < 0) { return true; } if ($ma1 > $ma2) { return true; } if ($ma1 < $ma2) { return false; } // Minor version number $mi1 = $v1->getMinor(); $mi2 = $v2->getMinor(); if ($mi1 < 0 && $mi2 >= 0) { return false; } if ($mi1 >= 0 && $mi2 < 0) { return true; } if ($mi1 > $mi2) { return true; } if ($mi1 < $mi2) { return false; } // Patch level $p1 = $v1->getPatch(); $p2 = $v2->getPatch(); if ($p1 < 0 && $p2 >= 0) { return false; } if ($p1 >= 0 && $p2 < 0) { return true; } if ($p1 > $p2) { return true; } if ($p1 < $p2) { return false; } // Build number $b1 = $v1->getBuild(); $b2 = $v2->getBuild(); if ($b1 < 0 && $b2 >= 0) { return false; } if ($b1 >= 0 && $b2 < 0) { return true; } if ($b1 > $b2) { return true; } if ($b1 < $b2) { return false; } // Tag. $t1 = $v1->getTag(); $t2 = $v2->getTag(); if ($t1 === $t2) { return false; } if ($t1 === '' && $t2 !== '') { return true; //v1 has no tag, v2 has tag } if ($t1 !== '' && $t2 === '') { return false; //v1 has tag, v2 has no tag } // both have tags, sort them naturally to see which one is greater. $array = array($t1, $t2); natsort($array); // natsort() preserves array keys. $array[0] may not be the first element. return reset($array) === $t2; }
/** * Checks if a given string is greater than another * @param string|version $v1 The first version * @param string|version $v2 The second version * @return boolean */ static function gt($v1, $v2) { $v1 = new version($v1); $v2 = new version($v2); $ma1 = $v1->getMajor(); $ma2 = $v2->getMajor(); if ($ma1 < 0 && $ma2 >= 0) { return false; } if ($ma1 >= 0 && $ma2 < 0) { return true; } if ($ma1 > $ma2) { return true; } if ($ma1 < $ma2) { return false; } $mi1 = $v1->getMinor(); $mi2 = $v2->getMinor(); if ($mi1 < 0 && $mi2 >= 0) { return false; } if ($mi1 >= 0 && $mi2 < 0) { return true; } if ($mi1 > $mi2) { return true; } if ($mi1 < $mi2) { return false; } $p1 = $v1->getPatch(); $p2 = $v2->getPatch(); if ($p1 < 0 && $p2 >= 0) { return false; } if ($p1 >= 0 && $p2 < 0) { return true; } if ($p1 > $p2) { return true; } if ($p1 < $p2) { return false; } $b1 = $v1->getBuild(); $b2 = $v2->getBuild(); if ($b1 < 0 && $b2 >= 0) { return false; } if ($b1 >= 0 && $b2 < 0) { return true; } if ($b1 > $b2) { return true; } if ($b1 < $b2) { return false; } if ($v1->getTag() === '' && $v2->getTag() === '') { return false; } if ($v1->getTag() === '' && $v2->getTag() !== '') { return true; } //v1 has no tag, v2 has tag if ($v1->getTag() !== '' && $v2->getTag() === '') { return false; } //v1 has tag, v2 has no tag // both have tags, sort them naturally to see which one is greater. $array = array($v1->getTag(), $v2->getTag()); natsort($array); return reset($array) != $v1->getTag(); }