php 版本处理类

最后更新于:2022-04-01 14:13:03

### php 版本处理类 例如记录app版本,或某些版本数据,如果使用1.0.0这种版本格式记录入库,在需要筛选查询时会比较麻烦。  而把版本字符串转为数字保存,可以方便版本间的比较和筛选。 例如:要查询3.0.1 与 10.0.1之间的版本,因为3.0.1比10.0.1大(字符串比较),因此需要处理才可以查询。  而把 **3.0.1** 和 **10.0.1** 先转为数字 **30001** 和 **100001**来比较查询,则很方便。 **Version.class.php** ~~~ <?php /** * 版本处理类,提供版本与数字互相转换,方便入库后进行比较筛选 * Date: 2015-06-30 * Author: fdipzone * ver: 1.0 * * Func: * public version_to_integer 将版本转为数字 * public integer_to_version 将数字转为版本 * public check 检查版本格式是否正确 * public compare 比较两个版本的值 */ class Version{ // class start /** * 将版本转为数字 * @param String $version 版本 * @return Int */ public function version_to_integer($version){ if($this->check($version)){ list($major, $minor, $sub) = explode('.', $version); $integer_version = $major*10000 + $minor*100 + $sub; return intval($integer_version); }else{ throw new ErrorException('version Validate Error'); } } /** * 将数字转为版本 * @param Int $version_code 版本的数字表示 * @return String */ public function integer_to_version($version_code){ if(is_numeric($version_code) && $version_code>=10000){ $version = array(); $version[0] = (int)($version_code/10000); $version[1] = (int)($version_code%10000/100); $version[2] = $version_code%100; return implode('.', $version); }else{ throw new ErrorException('version code Validate Error'); } } /** * 检查版本格式是否正确 * @param String $version 版本 * @return Boolean */ public function check($version){ $ret = preg_match('/^[0-9]{1,3}\.[0-9]{1,2}\.[0-9]{1,2}$/', $version); return $ret? true : false; } /** * 比较两个版本的值 * @param String $version1 版本1 * @param String $version2 版本2 * @return Int -1:1<2, 0:相等, 1:1>2 */ public function compare($version1, $version2){ if($this->check($version1) && $this->check($version2)){ $version1_code = $this->version_to_integer($version1); $version2_code = $this->version_to_integer($version2); if($version1_code>$version2_code){ return 1; }elseif($version1_code<$version2_code){ return -1; }else{ return 0; } }else{ throw new ErrorException('version1 or version2 Validate Error'); } } } // class end ?> ~~~ **demo.php** ~~~ <?php require 'Version.class.php'; $version = '2.7.1'; $obj = new Version(); // 版本转数字 $version_code = $obj->version_to_integer($version); echo $version_code.'<br>'; // 20701 // 数字转版本 $version = $obj->integer_to_version($version_code); echo $version.'<br>'; // 2.7.1 // 检查版本 $version = '1.1.a'; var_dump($obj->check($version)); // false // 比较两个版本 $version1 = '2.9.9'; $version2 = '10.0.1'; $result = $obj->compare($version1, $version2); echo $result; // -1 ?> ~~~ 源码下载地址:点击查看
';