3

我的一串数字没有正确替换。

我期待替换后的输出,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);
?>
4

2 回答 2

6

这会产生输出0123443210,因为带有数组的 str_replace 将在迭代时开始替换早期的匹配项$numbers

对于像这样的单个字母换位,请改用strtr

 $encoded = strtr($pre, "0123456789", "9876543210");
于 2013-07-10T09:28:45.333 回答
1

解释有点长,但让我告诉你发生了什么。对于数组中的每个元素,它从字符串的开头替换所有内容。让我们定义N for$numberC for$codeR for$result

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()

于 2013-07-10T09:35:45.480 回答