PHP:如何获取在内置函数(如strpos)中遍历的数组的当前值?
我想用字符串长度替换一些单词的实例 “XXXX大于XX”变为“4大于2” 我打算编写的代码:PHP:如何获取在内置函数(如strpos)中遍历的数组的当前值?,php,arrays,Php,Arrays,我想用字符串长度替换一些单词的实例 “XXXX大于XX”变为“4大于2” 我打算编写的代码: $myStrings = Array("XX","XXX","XXXX","XXXXX"); $outStr = str_replace($myStrings,strlen(current($myStrings)),$outStr); 但在这里,电流不起作用 另外,请不要建议做这些事情的变通方法,因为这不是我想问论坛的问题。我的查询是获取指向正在内部遍历的数组的当前指针 谢谢。我想你做不到。由于它是一
$myStrings = Array("XX","XXX","XXXX","XXXXX");
$outStr = str_replace($myStrings,strlen(current($myStrings)),$outStr);
但在这里,电流不起作用
另外,请不要建议做这些事情的变通方法,因为这不是我想问论坛的问题。我的查询是获取指向正在内部遍历的数组的当前指针
谢谢。我想你做不到。由于它是一个内部实现,PHP将向您公开什么,您可以使用它来确定当前元素 请注意,这与使用
current()
、key()
、next()
、reset()
等访问内部数组指针不同。我指的是PHP有一个内部实现stru 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
哦,顺便说一句,这就是我所说的:
如果search
是一个数组,而replace
是一个字符串,那么这个替换字符串将用于search的每个值
因此,特别是对于
str_replace()
,我认为您从未打算传入基于输入数组的动态替换字符串。我认为您不能。由于它是一个内部实现,PHP将向您公开什么,您可以使用它来确定当前元素
请注意,这与使用current()
、key()
、next()
、reset()
等访问内部数组指针不同。我指的是PHP有一个内部实现stru 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
哦,顺便说一句,这就是我所说的:
如果search
是一个数组,而replace
是一个字符串,那么这个替换字符串将用于search的每个值
因此,特别是对于
str_replace()
,我认为您从未打算传入一个基于输入数组的动态替换字符串。并且不是一个选项?也不是一个选项?您正在寻找的函数是数组映射
。它将函数应用于数组的所有元素,并将结果作为新数组输出:
$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);
您要查找的函数是
array\u 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);
谢谢,这很有帮助。那么我最好写一个循环。@Dhruv:您也可以使用
preg\u replace()
来消除对数组的需要@mck89发布了一个答案,但删除了它,大概是因为您声明不发布解决方案。在任何情况下,请务必单击答案旁边的复选标记,将其标记为已接受。快乐的黑客!谢谢,这很有帮助。那么我最好写一个循环。@Dhruv:您也可以使用preg\u replace()
来消除对数组的需要@mck89发布了一个答案,但删除了它,大概是因为您声明不发布解决方案。在任何情况下,请务必单击答案旁边的复选标记,将其标记为已接受。快乐的黑客@Matjis:但这能确保strlen应用于从$myStrings haystack检查的当前指针吗?@Dhruv:这里的技巧是代码创建一个包含替换值的数组,然后从一个数组到另一个数组进行1对1替换。@Matjis:但这能确保strlen应用于正在检查的当前指针吗检查$myStrings haystack?@Dhruv:这里的技巧是代码创建一个包含替换值的数组,然后从一个数组到另一个数组进行1对1替换。