version_compare('5.2', '5.2.0'); // returns -1, as if the second parameter is greater!
Czy 5.2 i 5.2.0 nie są równe? (czy nie 5.2 i 5.2.0.0 są równe)?PHP: version_compare() zwraca -1 przy porównywaniu 5.2 i 5.2.0?
version_compare('5.2', '5.2.0'); // returns -1, as if the second parameter is greater!
Czy 5.2 i 5.2.0 nie są równe? (czy nie 5.2 i 5.2.0.0 są równe)?PHP: version_compare() zwraca -1 przy porównywaniu 5.2 i 5.2.0?
Dokumentacja mówi, że porównuje "dwa" standaryzowane numery PHP "ciągi numerów wersji".
Porównujesz jeden standardowy numer wersji PHP z jednym standardem numeru wersji znormalizowanym poza PHP.
Zadałem to pytanie, ponieważ używam version_compare do porównywania również wersji mysql, wersji Zend i innych wtyczek .. ale myślę, że słowo "standaryzowane PHP" oznacza, że version_compare powinno być używane tylko do porównywania wersji PHP, prawda? – evilReiko
Powiedziałbym, że to całkiem bezpieczny zakład. – ceejayoz
Nie, będzie działać z numerami wersji dla innych programów/bibliotek, ale tylko jeśli będą one zgodne ze wzorcem opisanym w instrukcji –
Sekwencje 5.2 i 5.2.0 są standaryzowanymi wersjami PHP. AFAIU 5.2 oznacza 5.2.0, 5.2.1, itd. Wynik jest logiczny, 5.2 nie może być równy 5.2.1 lub 5.2.0, a na przykład nie może być większy niż 5.2.0.
Więc tylko oczekiwane zachowanie jest 5,2 < 5.2.0, 5.2.1 5.2 < ...
Btw nawet stany dokumentacja:
W ten sposób nie tylko wersje z różnych poziomach, takich jak '4.1' i „4.1.2” można porównać, ale także ...
Dokładnie, jakość dokumentacji PHP może być naprawdę żartem. Potrzebujemy lepszych standardów – Pacerier
Oto Tweaked porównać funkcja, która zachowuje się zgodnie z oczekiwaniami przez przycinanie elementów zerowych wersja sufiks, tj 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);
}
Niesamowite rozwiązanie! Napisano wiele testów jednostkowych i działa jak urok :) dziękuję –
Czy kiedykolwiek [przeczytałeś instrukcję] (http://php.net/version_compare)? – Teneff
Przeczytałem instrukcję przed zadaniem pytania, ale dopiero teraz nauczyłem się znaczenia "wersji standardowej PHP" – evilReiko