PHP 8.5.0 Beta 1 available for testing

Voting

: min(one, zero)?
(Example: nine)

The Note You're Voting On

russell dot s dot harper at gmail dot com
15 years ago
A gotcha when using the value from gmp_strval as a key in an associative array. Some numbers are 2^31 are converted to signed integer format, this is usually incorrect.

<?php

$a
= gmp_init('2147483649'); // = 2^31 + 1
$b = gmp_init('3173604585'); // = 2^31 < $b < 2^32

$c = gmp_strval($a);
$d = gmp_strval($b);

$e = array($c => 'c', $d => 'd');

print
'*** Expect '."\n";
print
'Array '."\n".'('."\n".' ['.$c.'] => c'."\n".' ['.$d.'] => d'."\n".')'."\n\n";
print
'*** Actual '."\n";
print_r($e);

?>

Output:

*** Expect
Array
(
[2147483649] => c
[3173604585] => d
)

*** Actual
Array
(
[-2147483647] => c
[3173604585] => d
)

A workaround is to format as base 16 and append '0x' before using as a key.

<< Back to user notes page

To Top