gmp_cmp

funkcja

Porównuje dwie dowolnie duże liczby całkowite GMP; zwraca int: >0, 0 lub <0.

gmp_cmp(GMP|int|string $num1, GMP|int|string $num2): int

gmp_cmp porównuje $num1 z $num2 i zwraca zwykłe PHP int: liczbę dodatnią gdy $num1 > $num2, 0 gdy są równe, liczbę ujemną gdy $num1 < $num2. Wzorzec jest identyczny jak w strcmp() czy spaceship operator (<=>). Nie należy używać == lub > bezpośrednio na obiektach GMP — porównywałoby referencje, nie wartości.

<?php
declare(strict_types=1);

echo gmp_cmp(10, 5);  // wynik: 1  (10 > 5)
echo gmp_cmp(5, 10);  // wynik: -1 (5 < 10)
echo gmp_cmp(5, 5);   // wynik: 0  (równe)

// Sortowanie tablicy dużych liczb GMP
$liczby = [gmp_init('999999999999999999'), gmp_init('1'), gmp_init('500000000000000000')];
usort($liczby, 'gmp_cmp');
foreach ($liczby as $l) {
    echo gmp_strval($l) . PHP_EOL;
}
// wynik: 1 / 500000000000000000 / 999999999999999999

Argumenty mogą być obiektami GMP, liczbami int lub ciągami znaków. Funkcja jest bezpieczna do użycia jako callback w usort() i uasort().

📘 Naucz się w lekcji →