由于某些奇怪的原因,当输入11
时,下面的函数返回2
,我希望它返回1
。有什么问题?
<?php
function convert($v){
$arr = array(
2 => 1,
21 => 1,
3 => 2,
6 => 2,
11 => 2,
12 => 2,
4 => 3,
14 => 3,
19 => 3,
9 => 5,
1 => 11,
10 => 11,
22 => 12,
23 => 13,
14 => 14,
);
$ret = str_replace(array_keys($arr), array_values($arr), $v);
return $ret;
}
echo convert(2); // echoes 11
?>
答案 0 :(得分:3)
您使用了错误的功能,请尝试使用strtr
:
function convert($v){
$arr = array(
2 => 1,
21 => 1,
...
23 => 13,
14 => 14,
);
$ret = strtr($v, $arr);
return $ret;
}
在任何情况下:如果您发现PHP函数有些奇怪,请访问它的手册页并阅读它,对于str_replace
,我们会给出一个解释您问题的具体示例:Example #2 Examples of potential str_replace() gotchas
答案 1 :(得分:2)
这是因为str_replace()
从左到右处理每个替换。因此,当它与数组中的键2
匹配时,它会更改为1
。之后,它会点击密钥1
并更改为11
。举个简短的例子:
function convert($v) {
$arr = array(
1 => 2,
2 => 3,
3 => 'cat',
);
$ret = str_replace(array_keys($arr), array_values($arr), $v);
return $ret;
}
echo convert(1); //cat is echoed
因此,在这种情况下,1
转到2
,然后2
转到3
,最后3
转到cat
}。