Mar
15

PHP数组求差,isset与array_key_exists的效率     2009

 17:41    1927    0   noel 程序 代码 源码 不指定 | |
PHP数组求差



example 1



function array_diff($array_1, $array_2) {
                $diff = array();
            
                foreach ($array_1 as $k => $v1) {
                    $flag = false;
                    foreach ($array_2 as $v2) {
                        if ($flag = ($v1 == $v2)) {
                            break;
                        }
                    }
            
                    if (!$flag) {
                        $diff[$k] = $v1;
                    }
                }
            
                return $diff;
            }
  


example 2


function array_diff($array_1, $array_2) {
                foreach ($array_1 as $key => $item) {
                    if (in_array($item, $array_2, true)) {
                        unset($array_1[$key]);
                    }
                }
            
                return $array_1;
            }

  
          

example 3


function array_diff($array_1, $array_2) {
                $array_2 = array_flip($array_2);
                foreach ($array_1 as $key => $item) {
                    if (isset($array_2[$item])) {
                        unset($array_1[$key]);
                    }
                 }
            
                return $array_1;
            }
            



比较一下isset 与array_key_exists 的效率:
查找一个存在的key


//isset 与 array_key_exitsts的比较
            
            for($i = 0 ;$i< 100000;$i++){
                $arr['a'.$i] = 'A'.$i;
            }
            
            $time = microtime(1);
            $a = isset($arr['a50000']);
            $t1 = microtime(1) - $time;
            
            $time = microtime(1);
            $a = array_key_exists('a50000',$arr);
            $t2 = microtime(1) - $time;
            
            echo $t1;
            echo "\n";
            echo $t2;
            
            
            exit;


输出:
----------PHP代码调试 ----------
4.10079956055E-005
1.4066696167E-005
输出完成 (耗时 5 秒) - 正常终止

查找一个不存在的:



//isset 与 array_key_exitsts的比较
            
            for($i = 0 ;$i< 100000;$i++){
                $arr['a'.$i] = 'A'.$i;
            }
            
            $time = microtime(1);
            $a = isset($arr['a50000000000']);
            $t1 = microtime(1) - $time;
            
            $time = microtime(1);
            $a = array_key_exists('a50000000000',$arr);
            $t2 = microtime(1) - $time;
            
            echo $t1;
            echo "\n";
            echo $t2;
            
            
            exit;




输出:

----------PHP代码调试 ----------
4.31537628174E-005
1.19209289551E-005
输出完成 (耗时 0 秒) - 正常终止

结论:数组中检查一个key是否存在时,用isset 比array_key_exists  要快的多,


            

作者:noel@淘宝网女装新款秋装连衣裙裤子外套上衣_2012时尚女装新款 Ecmall二次开发-PHP技术
地址:http://www.laohucheng.com/post/122/
版权所有©转载时必须以链接形式注明作者和原始出处及本声明!

Tags: , 引用(0)
发表评论
昵称 [注册]
密码 游客无需密码
网址
电邮
打开HTML 打开UBB 打开表情 隐藏 记住我