你自己对比下
$arr=array('ii"',array('one'=>'ec"','two'=>5),'aa"a');
function t(& $arr){
    foreach($arr as $k => $v){
        if(is_string($v)){
            $arr[$k] = addslashes($v);
        }else{
            $arr[$k] = t($v);
        }
    }
    return $arr;
}
t($arr);
echo "<pre>";
print_r($arr);
echo '</pre>';

解决方案 »

  1.   

    $arr = array('ii"',array('one'=>"ec'",'two'=>5));
    array_walk_recursive($arr, function(&$v) { $v = addslashes($v);} );
    print_r($arr);
    Array
    (
        [0] => ii\"
        [1] => Array
            (
                [one] => ec\'
                [two] => 5
            ))
      

  2.   

    你的代码要这样改$arr=array('ii"',array('one'=>'ec"','two'=>5));
    function t(&$arr){
      foreach($arr as $i=>&$v){
        if(is_array($v)){
          t($v);
        }else{
          $arr[$i] = addslashes($v);
        }
      }
    }
    t($arr);
    print_r($arr);
      

  3.   

    改成這樣就可以了。function t(&$arr){
    foreach($arr as $key=>$v){
    if(is_string($v)){
    $arr[$key]=addslashes($v);
    }else{
    t($arr[$key]);
    }
    }
    }
      

  4.   

    我比较喜欢捣乱function t(&$arr){
        foreach($arr as $key=>$v){
            if(is_string($v)){
                $arr[$key]=addslashes($v);
            }else{
                t($arr[$key]);
            }
        }
    }$arr=array('ii"',array('one'=>'ec"','two'=>5));
    t($arr);Invalid argument supplied for foreach() 
      

  5.   

    再改一下。
    function t(&$arr){
        foreach($arr as $key=>$v){
            if(is_array($v)){
                t($arr[$key]);
            }else{
                $arr[$key]=addslashes($v);
    }
        }
    }
     
    $arr=array('ii"',array('one'=>'ec"','two'=>'5'));
    t($arr);print_r($arr);
      

  6.   

    谢谢楼上几位大神的耐心解答,你们提供的答案都正确,但是并没有指出我的问题所在。我看了一天的代码,终于发现我写的代码问题所在:报错的原因是,$arr=array('ii"',array('one'=>'ec"','two'=>5));我提供的参数进入到函数体内后最有'two'=>5递归到foreach不是一个数组,所以报为foreach提供了无效参数的警告$arr=array('ii"',array('one'=>'ec"','two'=>5));
    function t(&$arr){
    foreach($arr as $v){
    if(is_string($v)){
    $arr[]=addslashes($v);  //这里如果用$arr[]只能是在原数组情况下添加了元素
    }else{
    t($v);    //这里$v打印出来是array('one'=>'ec"','two'=>5)  当它递归重新走到foreach里面已经不是$arr原数组了,是和$arr完全不相关的一个新数组
    }
    }
    }
    如下面的写就ok啦!
    $arr=array('ii"',array('one'=>'ec"','two'=>5));
    function t(&$arr){
    foreach($arr as $k=>$v){
    if(is_string($v)){
    $arr[$k]=addslashes($v);
    }else{
    if(is_array($v)){    //加上判断后就可以关闭为foreach提供了无效参数的警告
    t($arr[$k]);   //这里指的是原数组foreach出来的array('one'=>'ec"','two'=>5)
    }