我的数字字符串未正确替换。
我希望替换后的输出为9876543210
,但似乎并非如此。
我做错了什么?
<?php
$numbers = array('0', '1', '2', '3', '4', '5', '6', '7', '8', '9');
$code = array('9', '8', '7', '6', '5', '4', '3', '2', '1', '0');
$pre = '0123456789';
echo $pre . " ==> " . str_replace($numbers, $code, $pre);
?>
答案 0 :(得分:5)
这会产生输出0123443210
,因为带有数组的str_replace将在迭代$numbers
时开始替换先前的匹配
对于像这样的单个字母转置,请改用strtr
$encoded = strtr($pre, "0123456789", "9876543210");
答案 1 :(得分:1)
解释时间有点长,但让我告诉你发生了什么。对于数组中的每个元素,它将从字符串的开头替换所有内容。我们为$number
定义 N ,为$code
定义 C ,为$result
定义 R
N C R
0 9 9123456789
1 8 9823456789
2 7 9873456789
3 6 9876456789
4 5 9876556789
5 4 9876446789
6 3 9873443789
7 2 9823443289
8 1 9123443219
9 0 0123443210
因此,您应该使用Paul提供的解决方案strtr()