Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/246.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

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:如何获取在内置函数(如strpos)中遍历的数组的当前值?_Php_Arrays - Fatal编程技术网

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

PHP:如何获取在内置函数(如strpos)中遍历的数组的当前值?,php,arrays,Php,Arrays,我想用字符串长度替换一些单词的实例 “XXXX大于XX”变为“4大于2” 我打算编写的代码: $myStrings = Array("XX","XXX","XXXX","XXXXX"); $outStr = str_replace($myStrings,strlen(current($myStrings)),$outStr); 但在这里,电流不起作用 另外,请不要建议做这些事情的变通方法,因为这不是我想问论坛的问题。我的查询是获取指向正在内部遍历的数组的当前指针 谢谢。我想你做不到。由于它是一

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

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

我打算编写的代码:

$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替换。