2012-06-12 36 views

回答

11

該文檔說明它比較了兩個PHP標準化的「版本號字符串」。

您正在將一個PHP標準化版本號字符串與一個非PHP標準化版本號字符串進行比較。

+1

我問這個問題是因爲我使用version_compare來比較mysql版本,zend版本和其他插件..但我猜「PHP標準化」這個詞意味着version_compare應該只用於比較PHP版本,對不對? – evilReiko

+1

我想說這是一個非常安全的賭注。 – ceejayoz

+1

不,它會與其他程序/庫的版本號一起工作,但只有遵循手冊 –

4

5.2和5.2.0都是PHP標準化版本號字符串。 AFAIU 5.2代表5.2.0,5.2.1等 結果是邏輯的,5.2不能等於5.2.1或5.2.0,例如它不能大於5.2.0。
因此,只有預期的行爲是5.2 < 5.2.0,5.2 < 5.2.1,...

順便說一句,即使在文檔狀態:

這樣不僅版本,不同層次,如 '4.1'和「4.1.2」可以比擬的,而且......

+0

的確,PHP文檔的質量確實可能是一個笑話。我們需要更好的標準 – Pacerier

7

下面是它的行爲的微調零個版本後綴組成部分,即5.2.0如預期微調的比較功能 - >5.2

var_dump(my_version_compare('5.1', '5.1.0'));   // 0 - equal 
var_dump(my_version_compare('5.1', '5.1.0.0'));   // 0 - equal 
var_dump(my_version_compare('5.1.0', '5.1.0.0-alpha')); // 1 - 5.1.0.0-alpha is lower 
var_dump(my_version_compare('5.1.0-beta', '5.1.0.0')); // -1 - 5.1.0-beta is lower 

function my_version_compare($ver1, $ver2, $operator = null) 
{ 
    $p = '#(\.0+)+($|-)#'; 
    $ver1 = preg_replace($p, '', $ver1); 
    $ver2 = preg_replace($p, '', $ver2); 
    return isset($operator) ? 
     version_compare($ver1, $ver2, $operator) : 
     version_compare($ver1, $ver2); 
} 
+0

真棒解決方案!爲此寫了很多單元測試,它的作用像魅力:)謝謝 –