2012-06-26 50 views
2

有趣的問題,我這裏有,平時我剛輪向上/向下分別爲我的電話號碼,但今天我發現自己有非常具體的需求。我正在研究一個有許多網點版本的項目。它是一種基於Web的應用程序,與客戶端應用程序,它的一個新特點是走出這裏的軟件,如果您的客戶端版本爲2.3或更高,則新功能是在應用程序avaliable,如果沒有的話,就需要被隱藏起來。所以我想PHP不是小數數大於不用輪,小區,樓

if($version >= 2.3){/*code to show*/} 

其犯規看起來與十進制基於數字的合作,是有一個變通的是,任何人都知道不涉及在任一方向四捨五入呢?

回答

8

有這個叫做version_compare()特定問題PHP函數。

if(version_compare($version, 2.3, '>=') >= 0) 
+0

我從來不知道這一點,這是一個方便的功能。不幸的是Nanne是他們的答案,在這裏,如果它不是一個0.0.0格式返回誤報正確。雖然我相信我的項目實際上是0.0.0格式,但這可能會奏效。 – chris

0

版本比較聽起來很酷,但您確實需要使用該格式。

如果您不使用「PHP標準化」的版本號,您可以使用bcmath時的bccomp比較2張十進制數。

http://www.php.net/manual/en/function.bccomp.php

+0

它實際上不是PHP特定的。事實上,[Apache](http://commons.apache.org/releases/versioning.html)有一個相當詳細的文檔,用於定義發佈版本的非常類似的版本化語法。 – nickb

+0

我從來沒有說過它是PHP特定的,手冊只是這樣描述它:「比較兩個」PHP標準化的「版本號字符串」,所以我接受了報價(這就是報價的原因)。沒有真正的問題是什麼Apache使用的,它的問題是,@克里斯並沒有說明他用什麼方式,所以我想這可能幫助,仍然認爲它。 – Nanne

0

我知道這可能是晚來回答這個問題,但這裏是我使用的功能:

if(!function_exists('CompareVersion')){ 
    function CompareVersion($v1='', $v2='', $s='>'){ 
     # We delete all characters except numbers 0-9 
     $regex = '/[^0-9]/'; 
     $v1 = preg_replace($regex, '', $v1); 
     $v2 = preg_replace($regex, '', $v2); 

     # Wewill get the length of both string 
     $lgt1 = strlen($v1); 
     $lgt2 = strlen($v2); 

     # We will make sure that the length is the same by adding zeros at the end 
     # Example: 1031 and 30215 - 1031 is smaller then 1031 become 10310 
     if($lgt2 > $lgt1){ 
      $v1 = str_pad($v1, $lgt2, 0, STR_PAD_RIGHT); 
     } elseif($lgt1 > $lgt2){ 
      $v2 = str_pad($v2, $lgt1, 0, STR_PAD_RIGHT); 
     } 

     # We remove the leading zeros 
     $v1 = ltrim($v1, 0); 
     $v2 = ltrim($v2, 0); 

     # We return the result 
     switch($s){ 
      case '>': return $v1 > $v2; 
      case '>=': return $v1 >= $v2; 
      case '<': return $v1 < $v2; 
      case '<=': return $v1 <= $v2; 
      case '=': 
      case '==': return $v1 == $v2; 
      case '===': return $v1 === $v2; 
      case '<>': 
      case '!=': return $v1 != $v2; 
      case '!==': return $v1 !== $v2; 
     } 
    } 
}