PHP:如何获取在内置函数(如strpos)中遍历的数组的当前值?

时间:2010-12-07 08:52:27

标签: php arrays

例如。我想用字符串长度替换某些单词的实例

“XXXX大于XX”变为“4大于2”

我打算写的代码:

$myStrings = Array("XX","XXX","XXXX","XXXXX");
$outStr = str_replace($myStrings,strlen(current($myStrings)),$outStr);

但是现在CURRENT没有用。

P.S。请不要建议解决这个问题的方法,因为那不是我打算在论坛上提出的问题。我的查询是获取当前在内部遍历的数组的指针。

谢谢。

3 个答案:

答案 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)