发完帖子想到一个改进方向,例如我们经常从数据库筛选出一个结果集数组,可能需要单独对某几个字段过滤
例如对title和content单独进行stripslashes
接口可以设计为 wstripslashes($data, 'title,content')
这样的话需要多一步对键值的判定

解决方案 »

  1.   

    您忘了 php 的 array_walk_recursive 函数
      

  2.   


    确实有个不爱看手册的坏毛病
    但是刚刚翻了一下,我粗浅的觉得这个函数可能无法满足需求
    1,如何支持多维数组?
    2,如何用它递归iconv('gbk', 'utf-8', $str)这种函数?
    因为没使用过这个函数,可能需要麻烦斑竹写个示例
      

  3.   

    $ar = array(
      array('汉字'),
      array('汉字'),
      array(
        array('汉字'),
        array('汉字'),
        array(
          array('汉字'),
          array('汉字'),
        ),
      ),
    );function zm(&$v, $k, $charset) {
      $v = iconv($charset[0], $charset[1], $v);
    }array_walk_recursive($ar, 'zm', array('gbk', 'utf-8'));
    print_r($ar);
      

  4.   


    感谢xu大,又学到东西了
    用系统提供的函数或许性能会强一些
    但结合开发体验,我还是想支持自己的方法
    array_walk_recursive对原数据是引用,而且参数传递方法比较死,如果想不污染$ar,同时让开发者使用便利,就要再定义一个函数
    function zm(&$v, $k, $charset) {
        $v = iconv($charset[0], $charset[1], $v);
    }function wiconv($in, $out, $content) {
        array_walk_recursive($content, 'zm', array($in, $out));
        return $content;
    }
    其实这样的wiconv也不行,还要加入$content本身就是字符串的判定条件~
    我是希望有一种快速创建新函数,并且不改变原函数使用习惯的方法,貌似有点面向对象的继承思想?
    比如我的方法中 iconv可以这样扩展:function wiconv() {
        //2代表递归第三个参数是目标
        return fn2array('iconv', func_get_args(), 2);
    }$ar = array('汉字', array(array('汉字')));
    print_r(wiconv('utf-8', 'gbk', $ar));    //不改变原函数使用习惯
    您觉得呢
      

  5.   

    function wiconv($in_charset, $out_charset, $str) {
      if(is_array($str)) {
        array_walk_recursive($str,
          function(&$v, $k, $p) {
            $v = iconv($p[0], $p[1], $v);
          }, array($in_charset, $out_charset));
        return $str;
      }
      return iconv($in_charset, $out_charset, $str);
    }
      

  6.   

    版主的水平我是很佩服的.... but....