递归的使用
最近paperen我都是在看别人的代码,phpcms,wordpress,都看得头晕眼花的,再次证实了自己那个真理--“看别人写的代码真是痛苦”,但是为了升级自己的php技能与水平,增加点经验值这也是必经之路啊。
不多说,前几天看到phpcms一个addslashes功能的函数,挺不错的,有了递归的方法,如果参数是一个数组的话会遍历整个数组数值,对于addslashes函数的定义就是给单引号('),双引号("),反斜杠(/)加上反斜杠。
echo addslashes(" ' " ");//将会得到 ' "
虽然递归用得不是很多,但是有时候也会派上用场,例如phpcms中那个函数。
function new_addslashes($string)
{
if(!is_array($string)) return addslashes($string);
foreach($string as $key => $val) $string[$key] = new_addslashes($val);
return $string;
}
很不错的递归,遍历了整个数组并给每个值套用了addslashes。其实好像考计算机等级考试的时候都偶尔会遇到递归。例如求一个数的阶。
function deep_in($num){
if(is_numeric($num) && $num>0){
return $num*deep_in($num-1);
}else if(!is_numeric($num)){
exit(ERROR);
}else{
return 1;
}
}
但是要注意的是,对于递归得要设置跳出点,不然会程序会不停地递归,就好像上面要判断一下$num是否大于0,如果不是就返回1吧,不然程序会一直递归下去deep_in($num-1),你觉得会算到什么时候呢……(当然现在看看这个程序貌似如果输入参数为负数时返回的也是1,不太对劲…)
而还有其他例子,大家可以随意发挥,写一下就会有思路了。我还写了个过滤函数。
function deep_strreplace($string){
$filter=array('NND','妈妈的');
if(!is_array($string)) return str_replace($filter,'***',$string);
foreach($string as $key=>$val) $string[$key]=deep_strreplace($val);
return $string;
}
$text_array=array(1=>'你NND的',2=>'NND的',3=>'妈妈的');
print_r(deep_strreplace($text_array));
//Array ( [1] => 你***的 [2] => ***的 [3] => *** )
毕竟说脏话是不对滴嘛。
2010/12/24 剩蛋節前一天補上:原來php裏面有一個強大的函數!才瞭解到所以補上,函數叫array_map,将回调函数作用到给定数组的单元上,所以這裏可以寫成這樣
function deep_strreplace($string){
$filter=array('NND','妈妈的');
return !is_array($string) ? str_replace($filter,'***',$string) : array_map('deep_strreplace', $string);
}
果然夠簡練!好漂亮啊!Nick one!
評論
0沒有任何評論