Home  >  Article  >  Backend Development  >  php -str_replace没法遍历替换

php -str_replace没法遍历替换

WBOY
WBOYOriginal
2016-06-13 12:16:06876browse

php -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里面去匹配下,有的换就替换。如果是这样的话 直接这样写就可以了:

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

------解决思路----------------------
$data[$k] = str_replace($pattern,$replacment,$v);
这句里面$v重新复制了,换成$data[$k]
$data[$k] = str_replace($pattern,$replacment,$data[$k]);
------解决思路----------------------
0 or<br />or<br />or<br />or<br />or<br />or<br />1 my<br />my<br />my<br />my<br />my<br />5y<br />2 you<br />you<br />you<br />you<br />you<br />you<br />3 which<br />which<br />qhich<br />which<br />which<br />which<br />4 love<br />kove<br />love<br />lovr<br />love<br />love<br />


楼主这是我打印出来的循环结果,其实在foreach中。str_replace已经生效,但是被后面的替换了,所以你才觉得没有替换
------解决思路----------------------
foreach ($data as $k => $v) {
中的 $v 是 $data[$k] 的副本
在内层循环中
$data[$k] = str_replace($pattern,$replacment,$v);
$v 并没有改变,所以所有的替换都是对原始数据,而不是对上次替换结果的

如果你写作
foreach ($data as $k => &$v) {
就可以看到,的确是起作用了

Statement:
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn