发完帖子想到一个改进方向,例如我们经常从数据库筛选出一个结果集数组,可能需要单独对某几个字段过滤
例如对title和content单独进行stripslashes
接口可以设计为 wstripslashes($data, 'title,content')
这样的话需要多一步对键值的判定
例如对title和content单独进行stripslashes
接口可以设计为 wstripslashes($data, 'title,content')
这样的话需要多一步对键值的判定
确实有个不爱看手册的坏毛病
但是刚刚翻了一下,我粗浅的觉得这个函数可能无法满足需求
1,如何支持多维数组?
2,如何用它递归iconv('gbk', 'utf-8', $str)这种函数?
因为没使用过这个函数,可能需要麻烦斑竹写个示例
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);
感谢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)); //不改变原函数使用习惯
您觉得呢
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);
}