2147483647, 'strB' => '', 'numC' => 0, 'extraD' => ''); } preg_match('/^([-\d]*)([^-\d]*)([-\d]*)(.*)$/', $p, $m); $r = array('numA' => intval($m[1]), 'strB' => $m[2], 'numC' => intval($m[3]), 'extraD' => $m[4]); if ($r['strB'] == '+') { ++$r['numA']; $r['strB'] = 'pre'; } return $r; } /** * Compare parsed version parts. * @param string $an * @param string $bp * @return int $r */ function NS_cmp($an, $bn) { if ($an < $bn) return -1; if ($an > $bn) return 1; return 0; } /** * Recursive string comparison. * @param string $as * @param string $bs * @return int $r */ function NS_strcmp($as, $bs) { if ($as == $bs) return 0; if ($as == '') return 1; if ($bs == '') return -1; return strcmp($as, $bs); } /** * Compare parsed version numbers. * @param string $ap * @param string $bp * @return int $r -1|0|1 */ function NS_CompareVersionParts($ap, $bp) { $avp = NS_ParseVersionPart($ap); $bvp = NS_ParseVersionPart($bp); $r = NS_cmp($avp['numA'], $bvp['numA']); if ($r) return $r; $r = NS_strcmp($avp['strB'], $bvp['strB']); if ($r) return $r; $r = NS_cmp($avp['numC'], $bvp['numC']); if ($r) return $r; return NS_strcmp($avp['extraD'], $bvp['extraD']); } /** * Master comparison function. * @param string $a complete version string. * @param string $b complete version string. * @return int $r -1|0|1 */ function NS_CompareVersions($a, $b) { $al = explode('.', $a); $bl = explode('.', $b); while (count($al) || count($bl)) { $ap = array_shift($al); $bp = array_shift($bl); $r = NS_CompareVersionParts($ap, $bp); if ($r != 0) return $r; } return 0; } ?>