不知道楼主说的替换指的是不是把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);
?>

解决方案 »

  1.   

    $data[$k] = str_replace($pattern,$replacment,$v);
    这句里面$v重新复制了,换成$data[$k]
    $data[$k] = str_replace($pattern,$replacment,$data[$k]);
      

  2.   

    谢谢,我知道这样子写可以做到替换的效果,但是我的疑惑是为什么上面用foreach替换为什么不行呢?错在哪儿了呢。。
      

  3.   

    $data[$k] = str_replace($pattern,$replacment,$v);
    $data[$k] 被循环的赋值,取最后一次赋值的结果.
      

  4.   

     你在循环中把$pattern $replacement $data[$k]都打印出来看看  应该就比较清晰了
      

  5.   

    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已经生效,但是被后面的替换了,所以你才觉得没有替换
      

  6.   

    foreach ($data as $k => $v) {
    中的 $v 是 $data[$k] 的副本
    在内层循环中
    $data[$k] = str_replace($pattern,$replacment,$v);
    $v 并没有改变,所以所有的替换都是对原始数据,而不是对上次替换结果的如果你写作
    foreach ($data as $k => &$v) {
    就可以看到,的确是起作用了