php -str_replace无法遍历替换
程序员文章站
2024-02-10 10:30:10
...
见如下代码
$data = array('or','my','you','which','love');
$arr = array('l'=>'k','w'=>'q','e'=>'r','t'=>'y','m'=>5);
foreach ($data as $k => $v) {
foreach ($arr as $key => $value) {
$pattern = $key;
$replacment = $value;
$data[$k] = str_replace($pattern,$replacment,$v);//无法替换??
// $data[$k] = str_replace(array_keys($arr),$arr,$v);
// $data[$k] = str_replace('l','k',$v);
}
}
var_dump($data);
?>
你在循环中把$pattern $replacement $data[$k]都打印出来看看 应该就比较清晰了
楼主这是我打印出来的循环结果,其实在foreach中。str_replace已经生效,但是被后面的替换了,所以你才觉得没有替换
$data = array('or','my','you','which','love');
$arr = array('l'=>'k','w'=>'q','e'=>'r','t'=>'y','m'=>5);
foreach ($data as $k => $v) {
foreach ($arr as $key => $value) {
$pattern = $key;
$replacment = $value;
$data[$k] = str_replace($pattern,$replacment,$v);//无法替换??
// $data[$k] = str_replace(array_keys($arr),$arr,$v);
// $data[$k] = str_replace('l','k',$v);
}
}
var_dump($data);
?>
回复讨论(解决方案)
不知道楼主说的替换指的是不是把data里面每个字符串中出现过的字符都去arr里面去匹配下,有的换就替换。如果是这样的话 直接这样写就可以了:
$data[$k] = str_replace($pattern,$replacment,$v);
这句里面$v重新复制了,换成$data[$k]
$data[$k] = str_replace($pattern,$replacment,$data[$k]);
谢谢,我知道这样子写可以做到替换的效果,但是我的疑惑是为什么上面用foreach替换为什么不行呢?错在哪儿了呢。。
$data[$k] = str_replace($pattern,$replacment,$v);
$data[$k] 被循环的赋值,取最后一次赋值的结果.
谢谢,我知道这样子写可以做到替换的效果,但是我的疑惑是为什么上面用foreach替换为什么不行呢?错在哪儿了呢。。
你在循环中把$pattern $replacement $data[$k]都打印出来看看 应该就比较清晰了
0 orororororor1 mymymymymy5y2 youyouyouyouyouyou3 whichwhichqhichwhichwhichwhich4 lovekovelovelovrlovelove
楼主这是我打印出来的循环结果,其实在foreach中。str_replace已经生效,但是被后面的替换了,所以你才觉得没有替换
foreach ($data as $k => $v) {
中的 $v 是 $data[$k] 的副本
在内层循环中
$data[$k] = str_replace($pattern,$replacment, $v);
$v 并没有改变,所以所有的替换都是对原始数据,而不是对上次替换结果的
如果你写作
foreach ($data as $k => &$v) {
就可以看到,的确是起作用了
推荐阅读
-
php -str_replace无法遍历替换
-
PHP中str_replace的指定替换次数不生效
-
PHP str_replace 替换多个敏感词 【急】
-
php正则匹配或者str_replace如何对英文的 度 这个符号进行替换?
-
php preg_match_all结合str_replace替换内容中所有img_PHP
-
php preg_match_all结合str_replace替换内容中所有img_PHP教程
-
php str_replace字符替换与数组替换
-
php str_replace的替换漏洞
-
php str_replace函数(可限制替换个数)_PHP教程
-
php正则匹配或者str_replace怎么对英文的 度 这个符号进行替换