Ce face version_compare
Versiunile nu pot fi comparate ca texte obișnuite: alfabetic, "8.10" vine înaintea lui "8.2". version_compare compară fiecare parte numerică separat și știe ordinea sufixelor: dev < alpha < beta < RC < versiunea finală.
Fără al treilea parametru, returnează -1 (prima este mai mică), 0 (egale) sau 1 (prima este mai mare). Cu un operator precum ">=" sau "<", returnează direct true sau false.
Parametri
| Parametru | Descriere |
|---|---|
$version1 |
Prima versiune. |
$version2 |
A doua versiune. |
$operator |
Opțional. <, <=, >, >=, ==, != (sau variantele lt, le, gt, ge, eq, ne). |
Ce returnează
-1, 0 sau 1; cu operator, true sau false.
Exemple
Exemplul 1: De ce nu merge comparația ca text
<?php
var_dump("8.2.0" < "8.10.0");
var_dump(version_compare("8.2.0", "8.10.0"));
var_dump(version_compare("8.2.0", "8.10.0", "<"));
Rezultat
bool(false)
int(-1)
bool(true)
Exemplul 2: Versiune minimă pentru un modul
<?php
$instalata = "2.4.1";
foreach (["2.4.0", "2.4.1", "2.5.0"] as $minima) {
$ok = version_compare($instalata, $minima, ">=");
echo "Necesită $minima: " . ($ok ? "compatibil" : "actualizează") . "\n";
}
Rezultat
Necesită 2.4.0: compatibil
Necesită 2.4.1: compatibil
Necesită 2.5.0: actualizează
Exemplul 3: Sufixe și versiuni incomplete
O versiune de test (rc1) este mai mică decât cea finală, iar 8.1 este considerată mai mică decât 8.1.0.
<?php
var_dump(version_compare("1.0rc1", "1.0"));
var_dump(version_compare("1.0beta", "1.0alpha"));
var_dump(version_compare("8.1", "8.1.0"));
Rezultat
int(-1)
int(1)
int(-1)
Greșeli frecvente
- Compari versiunile cu
<sau>direct pe texte. Pentru"8.2"și"8.10"rezultatul este greșit. - Te aștepți ca
"8.1"să fie egal cu"8.1.0". Pentruversion_comparenu sunt egale. Scrie versiunile cu același număr de părți.
Comenzi înrudite
phpversion: Returnează versiunea PHP care rulează scriptul sau versiunea unei extensii.strcmp / strcasecmp / strncmp: Compară două texte și spune dacă primul este mai mic, egal sau mai mare decât al doilea.