Search code examples
phpstringincrementdecrement

Decrement operator for strings bug in PHP?


There is an inconsistency in increment/decrement operator function regarding strings in -at least- my version of PHP. Here is what I mean:

php > echo phpversion();
7.4.11
php > $test = 'abc12';
php > // increment works as expected
php > echo(++$test);
abc13
php > echo(++$test);
abc14
php > echo(++$test);
abc15
php > // but decrement fails
php > echo(--$test);
abc15
php > echo(--$test);
abc15
php > echo(--$test);
abc15

Is this an expected behavior? Should I file a bug report or something? Do you know of a workaround?

edit: filed bug#80212


Solution

  • Here is what I finally went with:

    function decrement($str) {
      $matches = preg_split('/(\d+)\z/', $str, -1, PREG_SPLIT_DELIM_CAPTURE);
      @--$matches[1];
      return implode($matches);
    }
    

    Wouldn't call it elegant but I'd call it functional.