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.
$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".')'."nn";
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.