例如。我想用字符串长度替换某些单词的实例
“XXXX大于XX”变为“4大于2”
我打算写的代码:
$myStrings = Array("XX","XXX","XXXX","XXXXX");
$outStr = str_replace($myStrings,strlen(current($myStrings)),$outStr);
但是现在CURRENT没有用。
P.S。请不要建议解决这个问题的方法,因为那不是我打算在论坛上提出的问题。我的查询是获取当前在内部遍历的数组的指针。
谢谢。
答案 0 :(得分:1)
您正在寻找的功能是array_map
。它将函数应用于数组的所有元素,并将结果作为新数组输出:
$myStrings = Array("XX","XXX","XXXX","XXXXX");
$outStr = str_replace($myStrings,array_map('strlen', $myStrings)),$outStr);
这可能会产生新问题,因为在检查XXXX之前,XXXX将替换为22。对此的解决方案是反转输入数组:
$myStrings = array_reverse(Array("XX","XXX","XXXX","XXXXX"));
$outStr = str_replace($myStrings,array_map('strlen', $myStrings)),$outStr);
答案 1 :(得分:0)
我认为你不能。既然它是一个内部实现,那么PHP会向您展示哪些可以用来确定当前元素?
请注意,这与使用current()
,key()
,next()
,reset()
等访问内部数组指针不同。我指的是PHP有一个str_replace()
的内部实现来处理字符串数组的替换。
快速测试表明,无论如何,当用str_replace()
替换它们时,PHP似乎甚至不打扰数组指针:
$arr = array('a', 'b', 'c'); // Internal pointer is at a
$str = 'abc';
next($arr); // Internal pointer is at b
echo str_replace($arr, 'x', $str), "\n"; // xxx
echo current($arr), "\n"; // b
哦,顺便说一句,这就是the manual for str_replace()
所说的(强调我的):
如果
search
是一个数组且replace
是一个字符串,则此替换字符串用于 <的每个值< EM>search
强>
所以特别针对str_replace()
,我认为根据输入数组传递一个动态的替换字符串并不是你想要的。
答案 2 :(得分:0)