最近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!