version_compare('5.2', '5.2.0'); // returns -1, as if the second parameter is greater!
是不是5.2和5.2.0假設是相等的? (不是5.2和5.2.0.0也是相等的)?PHP:當比較5.2和5.2.0時,version_compare()返回-1?
version_compare('5.2', '5.2.0'); // returns -1, as if the second parameter is greater!
是不是5.2和5.2.0假設是相等的? (不是5.2和5.2.0.0也是相等的)?PHP:當比較5.2和5.2.0時,version_compare()返回-1?
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」可以比擬的,而且......
的確,PHP文檔的質量確實可能是一個笑話。我們需要更好的標準 – Pacerier
下面是它的行爲的微調零個版本後綴組成部分,即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);
}
真棒解決方案!爲此寫了很多單元測試,它的作用像魅力:)謝謝 –
你有沒有[閱讀說明書](http://php.net/version_compare)? – Teneff
我在提問前已經閱讀了手冊,但剛纔我已經瞭解了「PHP標準化版本」的含義 – evilReiko