Signatur
Beschreibung
gmp_cmp vergleicht zwei beliebig große ganze Zahlen, die als GMP-Objekte, native PHP-Integers oder numerische Strings übergeben werden können. Die Funktion gehört zur GMP-Erweiterung (GNU Multiple Precision Arithmetic Library) und eignet sich damit für Berechnungen mit Zahlen, die den Wertebereich von PHP-Integers überschreiten.
Der Rückgabewert folgt der in vielen Vergleichsfunktionen üblichen Konvention: Ein negativer Wert bedeutet, dass num1 kleiner als num2 ist; 0 bedeutet Gleichheit; ein positiver Wert bedeutet, dass num1 größer als num2 ist. Damit lässt sich gmp_cmp direkt als Comparator-Callback, z. B. in usort, einsetzen.
Typische Einsatzgebiete sind kryptografische Algorithmen (RSA, Diffie-Hellman), mathematische Berechnungen mit sehr großen Primzahlen sowie überall dort, wo normale PHP-Integerarithmetik aufgrund von Größenbeschränkungen nicht ausreicht.
Parameter
| Name | Typ | Default | Beschreibung |
|---|---|---|---|
| $num1 Pflicht | GMP|int|string | Die erste zu vergleichende Zahl. Kann ein GMP-Objekt, ein PHP-Integer oder ein numerischer String sein. |
|
| $num2 Pflicht | GMP|int|string | Die zweite zu vergleichende Zahl. Kann ein GMP-Objekt, ein PHP-Integer oder ein numerischer String sein. |
Rückgabewert
num1 kleiner als num2 ist; 0, wenn beide Zahlen gleich sind; und einen positiven Wert, wenn num1 größer als num2 ist.Beispiele
Einfacher Vergleich zweier GMP-Zahlen
<?php
$a = gmp_init('12345678901234567890');
$b = gmp_init('9876543210987654321');
$result = gmp_cmp($a, $b);
if ($result < 0) {
echo "a ist kleiner als b";
} elseif ($result === 0) {
echo "a und b sind gleich";
} else {
echo "a ist größer als b";
}
Sortieren eines Arrays von GMP-Zahlen mit usort
<?php
$zahlen = [
gmp_init('999999999999999999'),
gmp_init('1'),
gmp_init('123456789012345678'),
gmp_init('42'),
];
usort($zahlen, 'gmp_cmp');
foreach ($zahlen as $z) {
echo gmp_strval($z) . "\n";
}
Vergleich mit negativen Zahlen
<?php
$positiv = gmp_init('100');
$negativ = gmp_init('-100');
$cmp = gmp_cmp($negativ, $positiv);
echo $cmp < 0 ? "-100 ist kleiner als 100" : "Unerwartetes Ergebnis";
// Wichtig · Fallstricke
GMP-Erweiterung erforderlich: Die Funktion setzt voraus, dass PHP mit der GMP-Bibliothek kompiliert wurde (Erweiterung gmp). Ohne diese Erweiterung ist die Funktion nicht verfügbar. Seit PHP 5.6 werden GMP-Objekte automatisch aus Integers und numerischen Strings erstellt, sodass man gmp_init nicht immer explizit aufrufen muss.
Rückgabewert nicht auf ±1 normiert: Im Gegensatz zu einigen anderen Sprachen ist der zurückgegebene Wert nicht zwingend genau -1, 0 oder 1. Es sollte daher stets geprüft werden, ob das Ergebnis kleiner, gleich oder größer als 0 ist — kein direkter Vergleich auf -1 oder 1.