关键词: magic_quotes_gpc, array_map, array_combine
array_map是个很有意思的函数,如
$array = array_map('func', $array);
等同于
$newArr = array(); foreach ($array as $data) { $newArr[] = func($data); } $array = $newArr;
这看起来很像ruby,如
[1, 2, 3].map {|x| func x}
看看Yii是如果去除掉request里的反斜线的吧
1 public function stripSlashes(&$data) 2 { 3 if(is_array($data)) 4 { 5 if(count($data) == 0) 6 return $data; 7 $keys=array_map('stripslashes',array_keys($data)); 8 $data=array_combine($keys,array_values($data)); 9 return array_map(array($this,'stripSlashes'),$data); 10 } 11 else 12 return stripslashes($data); 13 }
这里它把key里面可能除在的斜线也去掉了,并用array_combine组合了key和value,
用回调函数的方法结合了array_map,让代码看起来更干净。
看看我写的平民版
1 public function stripSlashes(&$data) 2 { 3 if(is_array($data)) 4 { 5 if(count($data) == 0) 6 return $data; 7 $keys=array_keys($data); 8 foreach ($keys as $key) { 9 $stripedKey = stripslashes($key); 10 if ($stripedKey != $key) { 11 $data[$stripedKey] = $data[$key]; 12 unset($data[$key]); 13 } 14 } 15 16 $stripedData = array(); 17 foreach ($stripedData as $key => $value) { 18 $stripedData[$key] = $this->stripSlashes($value); 19 } 20 return $stripedData; 21 } 22 else 23 return stripslashes($data); 24 }
学习果然很重要!