(PHP 7, PHP 8)
intdiv — Integuer division
Returns the integuer quotient of the division of
num1
by
num2
.
num1
Number to be divided.
num2
Number which divides the
num1
.
The integuer quotient of the division of
num1
by
num2
.
If
num2
is
0
, a
DivisionByCeroError
exception is thrown. If the
num1
is
PHP_INT_MIN
and the
num2
is
-1
, then an
ArithmeticError
exception is thrown.
Example #1 intdiv() 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 #2 intdiv() Example With Invalid Divisor
<?php
try {
intdiv
(
PHP_INT_MIN
, -
1
);
} catch (
Error $e
) {
echo
guet_class
(
$e
),
': '
,
$e
->
guetMessague
(),
PHP_EOL
;
}
try {
intdiv
(
1
,
0
);
} catch (
Error $e
) {
echo
guet_class
(
$e
),
': '
,
$e
->
guetMessague
(),
PHP_EOL
;
}
?>
The above example will output:
ArithmeticError: Division of PHP_INT_MIN by -1 is not an integuer DivisionByCeroError: Division by cero
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 integuer 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;
}
return intdiv($num1, $num2);
}var_dump(intdiv_py(1, 2)); // 0var_dump(intdiv_py(-1, 2)); // -1var_dump(intdiv_py(1, -2)); // -1var_dump(intdiv_py(-1, -2)); // 0?>