intdiv()
Die intdiv()-Funktion in PHP führt eine ganzzahlige Division durch und gibt den ganzzahligen Quotienten zurück.
Die intdiv()-Funktion in PHP führt eine ganzzahlige Division durch: Sie dividiert eine ganze Zahl durch eine andere und gibt den ganzzahligen Quotienten zurück, wobei der Rest verworfen wird. Sie wurde in PHP 7.0 eingeführt, um eine klare und explizite Möglichkeit zu bieten, auszudrücken „wie oft passt B in A", ohne auf den /-Operator und eine manuelle Typumwandlung zurückgreifen zu müssen.
Diese Seite erklärt, was intdiv() zurückgibt, wie es sich von den Operatoren / und % unterscheidet, wie es negative Zahlen und Floats behandelt und wie die möglichen Fehler abgefangen werden.
Syntax
intdiv(int $num1, int $num2): int$num1— der Dividend (die zu dividierende Zahl).$num2— der Divisor (die Zahl, durch die dividiert wird).- Gibt den Quotienten
$num1 / $num2alsintzurück, wobei der Nachkommaanteil abgeschnitten wird.
Ein einfaches Beispiel
10 / 3 ergibt 3,333…, daher behält intdiv() den ganzzahligen Anteil 3 und verwirft die 0,333….
intdiv() vs. die Operatoren / und %
Der reguläre Divisionsoperator / liefert immer einen float, wenn die Zahlen nicht ohne Rest teilbar sind, während intdiv() stets einen int zurückgibt. Der Modulo-Operator % liefert den Rest, den intdiv() verwirft. Zusammen ermöglichen intdiv() und % die Rekonstruktion der ursprünglichen Zahl:
<?php
echo 10 / 3; // 3.3333333333333 (float)
echo "\n";
echo intdiv(10, 3); // 3 (int quotient)
echo "\n";
echo 10 % 3; // 1 (remainder)
echo "\n";
// quotient * divisor + remainder == dividend
echo intdiv(10, 3) * 3 + (10 % 3); // 10
?>Verwenden Sie intdiv(), wenn Sie wirklich ein ganzzahliges Ergebnis benötigen, etwa beim Aufteilen von Elementen in Seiten, beim Umrechnen von Sekunden in Minuten oder beim Verteilen einer Anzahl in Buckets fester Größe.
Abschneiden in Richtung Null
intdiv() schneidet in Richtung Null ab, nicht in Richtung negativer Unendlichkeit. Das ist bei negativen Operanden relevant und eine häufige Fehlerquelle, wenn Entwickler davon ausgehen, dass abgerundet wird:
<?php
echo intdiv(7, 2); // 3
echo "\n";
echo intdiv(-7, 2); // -3 (not -4)
echo "\n";
echo intdiv(7, -2); // -3
echo "\n";
echo intdiv(-7, -2); // 3
?>-7 / 2 ist -3,5; das Abschneiden in Richtung Null ergibt -3. (Wenn Sie explizit das Abrunden benötigen, verwenden Sie floor(-7 / 2), das -4 zurückgibt.)
Fehlerbehandlung
intdiv() wirft in zwei Fällen eine Ausnahme, gegen die Sie sich absichern sollten:
- Division durch null wirft einen
DivisionByZeroError. intdiv(PHP_INT_MIN, -1)wirft einenArithmeticError, da das mathematisch korrekte Ergebnis größer ist als der maximale Wert, den eine ganze Zahl aufnehmen kann.
<?php
function safeIntdiv($a, $b) {
try {
return intdiv($a, $b);
} catch (DivisionByZeroError $e) {
return "Cannot divide by zero";
} catch (ArithmeticError $e) {
return "Result out of integer range";
}
}
echo safeIntdiv(20, 4); // 5
echo "\n";
echo safeIntdiv(20, 0); // Cannot divide by zero
?>Hinweis:
intdiv()erwartet ganzzahlige Argumente. Ein Float wie7.9wird vor der Division in eine ganze Zahl umgewandelt (der Nachkommaanteil wird dabei abgeschnitten), sodassintdiv(7.9, 2)wieintdiv(7, 2)funktioniert. Für Divisionen, bei denen der Nachkommaanteil von Floats erhalten bleiben soll, verwenden Sie stattdessen die Funktionfmod()oder den/-Operator.
Fazit
Die intdiv()-Funktion bietet eine zuverlässige und explizite Möglichkeit, in PHP eine ganzzahlige Division durchzuführen. Beachten Sie, dass sie in Richtung Null abschneidet, dass der verworfene Rest über % verfügbar ist und dass sie DivisionByZeroError sowie ArithmeticError auslösen kann. Weitere Informationen zu numerischen Operationen finden Sie unter PHP Math, PHP Operators und PHP Numbers.