Php 如何在str#u replace()’;s搜索参数以映射我期望的方式?
我希望这个Php 如何在str#u replace()’;s搜索参数以映射我期望的方式?,php,arrays,str-replace,Php,Arrays,Str Replace,我希望这个str_replace()调用会给我类似abcdefghijklmnop的东西。但我的搜索数组中的数字字符串似乎被视为字符串以外的东西 我最终只是想了解的功能(例如,tra-fk-p | tr0-9a-j),当然是使用纯php而不是shellout 我在php-5.4.10--pl0-gentoo和php-5.5.4-pl0-gentoo上看到了相同的行为,所以我认为这不仅仅是一个版本的php的侥幸。为什么str_replace()会奇怪地处理搜索数组中的数字?它是如何处理它们的?替换
str_replace()
调用会给我类似abcdefghijklmnop
的东西。但我的搜索数组中的数字字符串似乎被视为字符串以外的东西
我最终只是想了解的功能(例如,tra-fk-p | tr0-9a-j
),当然是使用纯php而不是shellout
我在php-5.4.10--pl0-gentoo和php-5.5.4-pl0-gentoo上看到了相同的行为,所以我认为这不仅仅是一个版本的php的侥幸。为什么str_replace()会奇怪地处理搜索数组中的数字?它是如何处理它们的?替换将按顺序应用,并针对每个替换选项从头到尾扫描整个字符串 在第一次更换运行中将
0
替换为a
,然后在第十次更换运行中将a
替换为k
是正常的
您试图实现的是不对已替换的字符串执行替换。我认为那将被视为不直观/意外的行为
告诉我们您希望将此应用于哪些实际用例,以便我们能够提供更实用和直接的解决方案;适用于正确作业的正确工具。来自
因为str_replace()从左向右替换,所以在执行多次替换时,它可能会替换以前插入的值。另请参见本文档中的示例
它只是替换已经替换的值,这就是为什么会得到“奇怪的结果”
例如:
第一个结果字母是K
而不是A
这是因为0
被替换为A
,然后A
被替换为K
。当您以这种方式思考时,您将看到此函数的正确结果。您可以在PHP中使用函数:
php > echo str_replace(
array('0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'a', 'b', 'c', 'd', 'e', 'f'),
array('a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p'),
'01234567890abcdef') . PHP_EOL;
klmnopghijkklmnop
我想你要找的是strtr-哇。我在写我的
tr
代码片段时考虑了这个问题,这很有意义!我可以通过反转数组(或者按照其他人的建议使用strstr()
来获得正确答案。
echo strtr( '01234567890abcdef', '0123456789abcdef', 'abcdefghijklmnop' ) . PHP_EOL;
// abcdefghijaklmnop