zoukankan      html  css  js  c++  java
  • 源码学习之Yii-去掉magic_quote里的反斜线

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

    学习果然很重要!

  • 相关阅读:
    小球与盒子的故事
    2020.1.11 考试总结
    P4249 [WC2007]剪刀石头布
    P3825 [NOI2017]游戏
    BZOJ 2238 Mst
    P4240 毒瘤之神的考验
    生成函数(严重残缺)
    Min_25
    P3455 [POI2007]ZAP-Queries
    P3233 [HNOI2014]世界树
  • 原文地址:https://www.cnblogs.com/hugmyloneliness/p/3664468.html
Copyright © 2011-2022 走看看