Signed numeric strings compare differently now

PHP 7.1 changed how a string with a leading sign is treated in a numeric context, which is a correctness fix and a behaviour change in code that had been working.

var_dump('+10' == '10');    // 7.0: false   7.1: true
var_dump(is_numeric('+10')); // both true

// so a lookup keyed by a user-supplied string can now collide
$rates['+10'] ?? null;

The realistic case is a value arriving from a form or an API where a client sends +10 and another sends 10. Under 7.0 those were different array keys and different comparison results; now the comparison agrees and the array keys still do not, which is a worse kind of inconsistent. Casting explicitly at the boundary removes the question entirely.