version_compare în PHP

Compară corect două numere de versiune, de exemplu 8.2.0 și 8.10.0.

Sintaxă
version_compare(string $version1, string $version2, ?string $operator = null): int|bool

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". Pentru version_compare nu 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.