### 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
?>
~~~
源碼下載地址:點擊查看
- 前言
- php Captcha 驗證碼類
- php 替換敏感字符串
- php返回數據格式化類
- php XML文件解釋類
- php CSS Update Class
- PHPMailer - PHP email transport class
- PHP 遍歷文件夾及文件類及處理類
- 自動登入google play下載app report
- php click captcha 驗證碼類
- php 獲取頁面中的指定內容類
- php 支持斷點續傳的文件下載類
- php 縮略圖生成類,支持imagemagick及gd庫兩種處理
- php 根據url自動生成縮略圖
- php 過濾html標記屬性類
- php HTTP請求類,支持GET,POST,Multipart/form-data
- php Cookies 操作類
- php 密碼生成類
- php main 與 iframe 相互通訊類(同域/跨域)
- php 根據url自動生成縮略圖,并處理高并發問題
- php Timer 頁面運行時間監測類
- php 雙向隊列類
- php 導出CSV抽象類
- php zip文件內容比較類
- php 獲取/設置用戶訪問頁面語言類
- php 獲取Youtube某個User所有Video信息
- php 字符編碼轉換類,支持ANSI、Unicode、Unicode big endian、UTF-8、UTF-8+Bom 互相轉換
- php 版本處理類