ホームページ  >  記事  >  バックエンド開発  >  php -str_replace没法遍历替换

php -str_replace没法遍历替换

WBOY
WBOYオリジナル
2016-06-13 12:16:06834ブラウズ

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) {
就可以看到,的确是起作用了

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。