关键词: 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     }

 

 

学习果然很重要!