php 字符替换 strtr, str_replace
str_replace
<?php
$from = [1,2,3,'b'];
$to = ['a','b','c','d'];
$word='zbb2';
echo str_replace($from, $to, $word);
按逻辑理解应该是
z -> z
b -> d
b -> d
2 -> b
进行mapping,但是结果却是 zddd,原因在于 str_replace 的重复执行性质
也就是说第一步实际上得出的结果是 zddb
,但是经过检测发现还有可替换的值 b
再一次进行 b->d
的替换所以得到结果为 zddd
。
strtr
如果使用 strtr 进行替换
$arr = ['1' => 'A', '2' => 'B', '3' => 'C', 'B' => 'D');
$word = 'ZBB2';
echo strtr($word, $arr);
这样结果就是 'ZDDB',说明 strtr并不重复检测关键字是否存在,而是按照字符长度顺序执行,执行完成也就结束。