Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 如何在str#u replace()’;s搜索参数以映射我期望的方式?_Php_Arrays_Str Replace - Fatal编程技术网

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