zoukankan      html  css  js  c++  java
  • 一个自定义函数带来的思考

      今天和战五渣老师讨论函数返回值和抛出异常时,我写了一个查找数组中是否具备某些键的函数。我总结的结果是在合适的场景使用抛出异常,通用函数依然是通过返回值来完成他的功能。

      不过还有更多的关于编程方面的收获:关于同样一个问题,换一种思考的角度可以写出不同的代码。

    <?php
        //我需要定义一个函数,用来判断给定的数组中是否包含我所需要全部的键
        //根据需求,普通的解决思路
        function checkKey($array,$key)
        {
            if(!is_array($array)) {
                // not array
                return false;
            }
            $key = explode(',',$key);
            foreach($key as $k => $v) {
                if(!array_key_exists($v,$array)) {
                    //not in array
                    return false;
                }
            }
            return true;
        }
        //以下函数式战五渣老师提供的思路
        function newCheckKey($array,$key)
        {
            if(!is_array($array)) {
                return false;
            }
            $key = explode(',',$key); 
            $array_keys = array_keys($array); //取出给定数组的所有键
            $array_intersect  = array_intersect($array_keys,$key) ; //计算给定数组所有键与需要检查的键去交集
            if($array_intersect === $key) {
                  return true; //如果取得的交集是$key本身,说明$array包含有所有需要的键
            }
            return false; 
        }        
         //一种可读性非常低的写法
        function newCheckKey2($array,$key)
        {
            if(!is_array($array)) {
                return false;
            }
            $key = explode(',',$key);
            return array_intersect(array_keys($array),$key) === $key;
        }
    
        $data = ['zhanwuzha'=>'renzhewudi','bool'=>'jintiantuiqunle'];
        var_dump(checkKey($data,'zhanwuzha,bool'));        // true
        var_dump(checkKey($data,'zhanwuzha,bool,halei'));//false
        var_dump(newCheckKey($data,'zhanwuzha,bool'));  //true
        var_dump(newCheckKey($data,'zhanwuzha,bool,halei')); //false
        var_dump(newCheckKey2($data,'zhanwuzha,bool'));  //true
        var_dump(newCheckKey2($data,'zhanwuzha,bool,halei')); //false
    

      通过对比上面的代码,通过巧妙运用数学中集合的概念可以轻松的完成我想要的功能。通过foreach遍历数组也可以完成我需要的功能。当我们思考的更多一些的时候可能会获得更多的解决思路,可能通过对比改进不同方法就是我们水平提高的过程吧。

      另外我上面的第三个函数与第二个函数功能完全相同,但是少定义了两个变量,同时也降低了程序的可读性。当来维护难度会提高。不同的方法之间需要自己在以后的编程中进行取舍^_^

  • 相关阅读:
    管理心理学[9095]
    汽车文化[1196]
    小四轴——空心杯电机引起的电源干扰
    38 时序电路扩展2
    37 时序电路扩展1
    36 时序电路的动态特性分析2
    35 时序电路的动态特性分析1
    34 同步时序电路的设计方法2
    33 同步时序电路的设计方法1
    60. 第k个排列
  • 原文地址:https://www.cnblogs.com/jixingke/p/6284244.html
Copyright © 2011-2022 走看看