用PHP中的str_replace将数字替换为其他数字。

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);
?>

1
为什么不使用 strrev() 函数? - HamZa
你的输出是什么? - STT LCU
@HamZa:那只是一个简单的例子,我想把代码按另一种顺序混淆。@STTLCU:我的输出是“0123443210”。 - chongzixin
1
问题在于替换是按照数组顺序进行的,这意味着从0到4(一开始)的字符被替换了两次。请查看此示例@php.net http://php.net/manual/en/function.str-replace.php#example-4820 - Sebastian Neira
2个回答

6

这会产生输出 0123443210,因为str_replace和一个数组一起使用时,它将在迭代$numbers时开始替换较早的匹配项。

对于像这样的单个字母转置,请改用strtr

 $encoded = strtr($pre, "0123456789", "9876543210");

1
看起来是一个好的替换。我认为在这种情况下,这将是更加敏感的做法。 - Sebastian Neira

1
这有点长,但让我向您展示正在发生的事情。对于数组中的每个元素,它都会从字符串开头替换所有内容。我们定义N$numberC$codeR$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()

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接