(PHP 7, PHP 8)
intdiv —Integer division
Returns the integer quotient of the division ofnum1
bynum2
.
num1
Number to be divided.
num2
Number which divides thenum1
.
The integer quotient of the division ofnum1
bynum2
.
Ifnum2
is0
, aDivisionByZeroError exception is thrown. If thenum1
isPHP_INT_MIN
and thenum2
is-1
, then anArithmeticError exception is thrown.
Example #1intdiv() example
<?php
var_dump(intdiv(3,2));
var_dump(intdiv(-3,2));
var_dump(intdiv(3, -2));
var_dump(intdiv(-3, -2));
var_dump(intdiv(PHP_INT_MAX,PHP_INT_MAX));
var_dump(intdiv(PHP_INT_MIN,PHP_INT_MIN));
?>
The above example will output:
int(1)int(-1)int(-1)int(1)int(1)int(1)
Example #2intdiv() Example With Invalid Divisor
<?php
try {
intdiv(PHP_INT_MIN, -1);
} catch (Error $e) {
echoget_class($e),': ',$e->getMessage(),PHP_EOL;
}
try {
intdiv(1,0);
} catch (Error $e) {
echoget_class($e),': ',$e->getMessage(),PHP_EOL;
}
?>
The above example will output:
ArithmeticError: Division of PHP_INT_MIN by -1 is not an integerDivisionByZeroError: Division by zero
This does indeed seem to be equal to intdiv:
<?php
functionintdiv_1($a,$b){
return ($a-$a%$b) /$b;
}
?>
However, this isn't:
<?php
functionintdiv_2($a,$b){
returnfloor($a/$b);
}
?>
Consider an example where either of the parameters is negative:
<?php
$param1= -10;
$param2=3;
print_r([
'modulus'=>intdiv_1($param1,$param2),
'floor'=>intdiv_2($param1,$param2),
]);
/**
* Array
* (
* [modulus] => -3
* [floor] => -4
* )
*/
?>
Python style integer division, where the result is always rounded towards minus infinity.
1 // 2 is 0
(-1) // 2 is -1
1 // (-2) is -1
(-1) // (-2) is 0
<?php
functionintdiv_py(int $num1,int $num2):int{
if ($num1<0xor$num2<0){
$num1=abs($num1);
$num2=abs($num2);
$remainder=$num1%$num2;
return$remainder? -1-($num1-$remainder) /$num2: -$num1/$num2;
}
returnintdiv($num1,$num2);
}
var_dump(intdiv_py(1,2));// 0
var_dump(intdiv_py(-1,2));// -1
var_dump(intdiv_py(1, -2));// -1
var_dump(intdiv_py(-1, -2));// 0
?>