一个自定义函数带来的思考
今天和战五渣老师讨论函数返回值和抛出异常时,我写了一个查找数组中是否具备某些键的函数。我总结的结果是在合适的场景使用抛出异常,通用函数依然是通过返回值来完成他的功能。
不过还有更多的关于编程方面的收获:关于同样一个问题,换一种思考的角度可以写出不同的代码。
<?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遍历数组也可以完成我需要的功能。当我们思考的更多一些的时候可能会获得更多的解决思路,可能通过对比改进不同方法就是我们水平提高的过程吧。
另外我上面的第三个函数与第二个函数功能完全相同,但是少定义了两个变量,同时也降低了程序的可读性。当来维护难度会提高。不同的方法之间需要自己在以后的编程中进行取舍^_^