php -str_replace无法遍历替换

getAnw 2015-03-11 01:40:54
见如下代码
<?php
$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);
?>
...全文
219 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
xuzuning 2015-03-12
  • 打赏
  • 举报
回复
foreach ($data as $k => $v) { 中的 $v 是 $data[$k] 的副本 在内层循环中 $data[$k] = str_replace($pattern,$replacment,$v); $v 并没有改变,所以所有的替换都是对原始数据,而不是对上次替换结果的 如果你写作 foreach ($data as $k => &$v) { 就可以看到,的确是起作用了
杨林强 2015-03-12
  • 打赏
  • 举报
回复
0 or
or
or
or
or
or
1 my
my
my
my
my
5y
2 you
you
you
you
you
you
3 which
which
qhich
which
which
which
4 love
kove
love
lovr
love
love
楼主这是我打印出来的循环结果,其实在foreach中。str_replace已经生效,但是被后面的替换了,所以你才觉得没有替换
断点Bingo 2015-03-12
  • 打赏
  • 举报
回复
引用 3 楼 maper02 的回复:
谢谢,我知道这样子写可以做到替换的效果,但是我的疑惑是为什么上面用foreach替换为什么不行呢?错在哪儿了呢。。
你在循环中把$pattern $replacement $data[$k]都打印出来看看 应该就比较清晰了
Suckor 2015-03-12
  • 打赏
  • 举报
回复
$data[$k] = str_replace($pattern,$replacment,$v); $data[$k] 被循环的赋值,取最后一次赋值的结果.
getAnw 2015-03-11
  • 打赏
  • 举报
回复
谢谢,我知道这样子写可以做到替换的效果,但是我的疑惑是为什么上面用foreach替换为什么不行呢?错在哪儿了呢。。
jijibubu 2015-03-11
  • 打赏
  • 举报
回复
$data[$k] = str_replace($pattern,$replacment,$v); 这句里面$v重新复制了,换成$data[$k] $data[$k] = str_replace($pattern,$replacment,$data[$k]);
断点Bingo 2015-03-11
  • 打赏
  • 举报
回复
不知道楼主说的替换指的是不是把data里面每个字符串中出现过的字符都去arr里面去匹配下,有的换就替换。如果是这样的话 直接这样写就可以了:

<?php
$data = array('or','my','you','which','love');
$pattern = array('l','w','e','t','m');
$arr = array('k','q','r','y',5);
$newdata =  str_replace($pattern, $arr, $data);
var_dump($newdata);
?>

21,873

社区成员

发帖
与我相关
我的任务
社区描述
从PHP安装配置,PHP入门,PHP基础到PHP应用
社区管理员
  • 基础编程社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧