Doc #66765 [Asn->Opn]: strtr key replacing order
Edit report at https://bugs.php.net/bug.php?id=66765&edit=1
ID: 66765
Updated by: ab@php.net
Reported by: pawel dot ulewicz at gmail dot com
Summary: strtr key replacing order
-Status: Assigned
+Status: Open
Type: Documentation Problem
Package: Strings related
Operating System: Windows 7
PHP Version: 5.5.9
-Assigned To: ab
+Assigned To:
Block user comment: N
Private report: N
Previous Comments:
------------------------------------------------------------------------
[2016-10-12 15:40:19] cmb@php.net
It seems to me this is a documentation issue. strtr() walks the
string from left to right, continously replacing the longest
matching sequence.
------------------------------------------------------------------------
[2014-02-28 11:45:27] ab@php.net
I can confirm that, it's across platforms
- strtr('abcdef', ['a'=> '1', 'bcde'=> '2'])
works
- strtr('abcdef', ['abc'=> '1', 'bcde'=>
'2']) bug
------------------------------------------------------------------------
[2014-02-24 22:26:20] pawel dot ulewicz at gmail dot com
Description:
------------
It looks like strtr function replaces strings in the following order:
1) first occurences first,
2) longest keys first.
I don't think it's a bad thing, but it doesn't work as documented. Here's the
quation from the official docs:
"The longest keys will be tried first"
So, it's either a documentation problem or a bug.
Test script:
---------------
<?php
// expecting 'bcde' to be replaced first
echo strtr('abcdef', ['abc'=> '1', 'bcde'=>
'2']) . "\n";
// the following two are replaced as expected, just to give more info
echo strtr('abcdef', ['a'=> '2', 'abc'=>
'1']) . "\n";
echo strtr('abcdef', ['abcd'=> '2', 'abc'=>
'1']) . "\n";
Expected result:
----------------
a2f
1def
2ef
Actual result:
--------------
1def
1def
2ef
------------------------------------------------------------------------
--
Edit this bug report at https://bugs.php.net/bug.php?id=66765&edit=1
Thread (7 messages)