arrar_key_exists执行效率低下
2008/09/06 12:41 ArthurXF
很多时候我们在检测一个数组里是否包含了某个键值时会使用arrar_key_exists这个函数,这个函数最大的有点就是不管这个数组的值是什么,只要这个键值存在就返回true。那么如果在一个大数据量的数组中找到一个键值是否存在用这个函数呢效率就很低了。
我们从工作原理上来说,要想知道一个数组里是否包含一个键值,那肯定是遍历这个数组一个键值一个键值的检查是否相等,如果全部遍历结束,没找到就返回false,但是这里面就有问题了,如果在大数据量中经常查找一个键值,这么不断的遍历势必造成效率低下。
其实只要我们知道需要查找的那个数组值不为NULL,那么我们直接使用检查值函数isset(),或者直接使用$arr['key'],效率就会高很多。下面我们做一个例子测试一下:
由些可知:用array_key_exists程序效率慢了很多,但是在直接使用的时候,千万一定要注意,对于值为NUll或者0的数组检查,还是需要使用array_key_exists函数的。
我们从工作原理上来说,要想知道一个数组里是否包含一个键值,那肯定是遍历这个数组一个键值一个键值的检查是否相等,如果全部遍历结束,没找到就返回false,但是这里面就有问题了,如果在大数据量中经常查找一个键值,这么不断的遍历势必造成效率低下。
其实只要我们知道需要查找的那个数组值不为NULL,那么我们直接使用检查值函数isset(),或者直接使用$arr['key'],效率就会高很多。下面我们做一个例子测试一下:
<?php
include("common.php");
$time1 = getTime();
$arr = array('a'=>1,'b'=>3);
for($i=0;$i<10000000;$i++){
//if ($arr['a']) 1==1;
if (array_key_exists('a',$arr)) 1==1;
}
$time2 = getTime();
echo $time2-$time1;
?>
结果为:11.054秒include("common.php");
$time1 = getTime();
$arr = array('a'=>1,'b'=>3);
for($i=0;$i<10000000;$i++){
//if ($arr['a']) 1==1;
if (array_key_exists('a',$arr)) 1==1;
}
$time2 = getTime();
echo $time2-$time1;
?>
<?php
include("common.php");
$time1 = getTime();
$arr = array('a'=>1,'b'=>3);
for($i=0;$i<10000000;$i++){
if ($arr['a']) 1==1;
//if (array_key_exists('a',$arr)) 1==1;
}
$time2 = getTime();
echo $time2-$time1;
?>
结果为:4.079秒include("common.php");
$time1 = getTime();
$arr = array('a'=>1,'b'=>3);
for($i=0;$i<10000000;$i++){
if ($arr['a']) 1==1;
//if (array_key_exists('a',$arr)) 1==1;
}
$time2 = getTime();
echo $time2-$time1;
?>
由些可知:用array_key_exists程序效率慢了很多,但是在直接使用的时候,千万一定要注意,对于值为NUll或者0的数组检查,还是需要使用array_key_exists函数的。