PHP isset 和 array_key_exists 对比
经常使用 isset 判断变量或数组中的键是否存在,但是数组中可以使用 array_key_exists 这个函数,那么这两个
哪一个更优呢?
官方文档这样定义两者:
isset:语言构造器,用于检测变量是否已设置并且非 NULL,文档地址:http://php.net/manual/zh/function.isset.php
array_key_exists:函数,用于检查数组里是否有指定的键名或索引,文档地址:http://php.net/manual/zh/function.array-key-exists.php
注意:
1.isset 对于数组中为 NULL 的值不会返回 true,而 array_key_exists() 会
2.array_key_exists() 仅仅搜索第一维数组的键。多维数组里嵌套的键不会被搜到
接下来我们来对比一下两者的执行效率,测试代码如下:
#Example php version 5.2.5
<?php
2
3 $test_arr = array('aa'=>'dd','bb'=>'','cc'=>null,'dd'=>false);
4
5 echo "isset aa is ";var_dump(isset($test_arr['aa']));echo "\n";
6 echo "isset bb is ";var_dump(isset($test_arr['bb']));echo "\n";
7 echo "isset cc is ";var_dump(isset($test_arr['cc']));echo "\n";
8 echo "isset dd is ";var_dump(isset($test_arr['dd']));echo "\n";
9
10 //############################
11
12 echo "key_exist aa is ";var_dump(array_key_exists('aa',$test_arr));echo "\n";
13 echo "key_exist bb is ";var_dump(array_key_exists('bb',$test_arr));echo "\n";
14 echo "key_exist cc is ";var_dump(array_key_exists('cc',$test_arr));echo "\n";
15 echo "key_exist dd is ";var_dump(array_key_exists('dd',$test_arr));echo "\n";
16 echo "key_exist none is ";var_dump(array_key_exists('none',$test_arr));echo "\n";
17
18 //#############################
19
20 $start_time = microtime(true);
21 for($i = 0;$i < 10000;$i++) {
22 isset($test_arr['aa']);
23 }
24 $end_time = microtime(true);
25 $time = $end_time - $start_time;
26 echo "isset 10000 is $time\n";
27
28 $start_time = microtime(true);
29 for($i = 0;$i < 1000000;$i++) {
30 isset($test_arr['aa']);
31 }
32 $end_time = microtime(true);
33 $time = $end_time - $start_time;
34 echo "isset 1000000 is $time\n";
35
36 //##############################
37
38 $start_time = microtime(true);
39 for($i = 0;$i < 10000;$i++) {
40 array_key_exists('aa',$test_arr);
41 }
42 $end_time = microtime(true);
43 $time = $end_time - $start_time;
44 echo "array_key_exists 10000 is $time\n";
45
46 $start_time = microtime(true);
47 for($i = 0;$i < 1000000;$i++) {
48 array_key_exists('aa',$test_arr);
49 }
50 $end_time = microtime(true);
51 $time = $end_time - $start_time;
52 echo "array_key_exists 1000000 is $time\n";
53
54 //###############################
55
56 $start_time = microtime(true);
57 for($i = 0;$i < 10000;$i ++) {
58 in_array('dd',$test_arr);
59 }
60 $end_time = microtime(true);
61 $time = $end_time - $start_time;
62 echo "in_array 10000 is $time\n";
63
64 $start_time = microtime(true);
65 for($i = 0;$i < 1000000;$i++) {
66 in_array('dd',$test_arr);
67 }
68 $end_time = microtime(true);
69 $time = $end_time - $start_time;
70 echo "in_array 1000000 is $time\n"; ----------------------------------------------- 输出结果 isset aa is bool(true) isset bb is bool(true) isset cc is bool(false) isset dd is bool(true) key_exist aa is bool(true) key_exist bb is bool(true) key_exist cc is bool(true) key_exist dd is bool(true) key_exist none is bool(false) isset 10000 is 0.00150918960571
isset 1000000 is 0.113389968872
array_key_exists 10000 is 0.00272583961487
array_key_exists 1000000 is 0.272269964218
in_array 10000 is 0.00281500816345
in_array 1000000 is 0.281803131104
从上面的示例中我们可以看出 isset() 对应数组的 value 为 null 会返回 false,当对应数组为 空字符串或false 的时候
返回 true
array_key_exists() 只有数组不存在对应的 key 时才返回 false,其余返回 true
另外,从上面示例中也可以看出执行效率 isset > array_key_exists > in_array
PHP isset 和 array_key_exists 对比的更多相关文章
- 判断数组中有没有某个键 isset 和 array_key_exists 的效率比较
判断数组中有没有某个键 isset 和 array_key_exists 谁的效率高呢? 使用 array_key_exists 代码如下 结果如下 如果使用 isset 代码如下 结果如下: 很明显 ...
- PHP中测试in_array、isset、array_key_exists性能
测试in_array.isset.array_key_exists性能.自己写的简易测试代码: ini_set('display_errors',true); error_reporting(E_AL ...
- PHP判断键值数组是否存在,使用empty或isset或array_key_exists(转)
一个例子 猜猜看,下面的例子会输出什么? 1 2 3 4 5 6 7 8 9 10 11 12 13 14 <?php $a = array('a'=>1, 'b'=>0, 'c'= ...
- PHP判断键值数组是否存在,使用empty或isset或array_key_exists
<?php $a = array('a'=>1, 'b'=>0, 'c'=>NULL); echo 'a test by empty: ' , empty($a['a']) ...
- isset() 与 array_key_exists() 比较
1.对于数组值的判断不同,对于值为null或''或false,isset返回false,array_key_exists返回true: 2. 执行效率不同,isset是内建运算符,array_key_ ...
- json_encode和json_decode和isset和array_key_exists
1.json_decode() json_decode — 对 JSON 格式的字符串进行编码 说明 mixed json_decode ( string $json [, bool ...
- isset或array_key_exists,检查数组键是否存在
今天在导出报表的时候遇到了一个问题,undefined index:pid,然后就纳闷了,我的数组里面根本就没有pid,为什么会出现这个错误呢,我遍历了一下数组,发现果然有pid这个键,奇怪呀,我有做 ...
- PHP 中数组函数 isset 效率比 array_key_exists 更高
PHP 中数组函数 isset 效率比 array_key_exists 更高 PHP 浏览:4194 2014年04月05日 isset 和 array_key_exists 函数都可以用来测试数组 ...
- isset、empty、var==null、is_null、var===null详细理解
//isset: 判断变量是否被初始化 //它并不会判断变量是否为空,并且可能用来判断数组中元素是否被定义 //听说在数组用isset与array_key_exists高出4倍 $a = " ...
随机推荐
- laravel队列使用
1.修改.env中queue_driver = databases 2.php artisan queue:table 在database 目录下migrations里面有对应的表 3.执行迁移文件 ...
- 解决秒杀活动高并发出现负库存(Redis)
商城在秒杀活动开始时,同时有好多人来请求这个接口,即便做了判断库存逻辑,也难免防止库存出现超卖,造成损失 Django中的ORM本身就对数据库做了防范,但再过亿级访问也扛不住 下面利用Redis的过载 ...
- vim diff 使用
1. 可以在用户目录下编辑.vimrc 文件,设置vim格式.如无该文件,添加即可vim ~/.vimrc 内容自己添加set ts=4 "set tabstop=4set nu &q ...
- linux下查看CPU、内存、磁盘信息
1.查看CPU信息# 总核数 = 物理CPU个数 X 每颗物理CPU的核数 # 总逻辑CPU数 = 物理CPU个数 X 每颗物理CPU的核数 X 超线程数 # 查看物理CPU个数cat /proc/c ...
- flex检查对象是否存在某个方法(函数)、属性的最简方法
//if("方法/属性名" in object){存在do...}else{不存在do...}if("data" in event.tagert)//只要使用这 ...
- linux的查找命令 find whereis locate
Linux 有三个查找文件的命令:find, whereis, locate 其中find 不常用,whereis与locate经常使用,因为find命令速度较慢,因为whereis与locate是利 ...
- python_函数式编程
函数式编程是一种编程范式 (而面向过程编程和面向对象编程也都是编程范式).在面向过程编程中,我们见到过函数(function):在面向对象编程中,我们见过对象(object).函数和对象的根本目的是以 ...
- make pycaffe时候报错:Makefile:501: recipe for target 'python/caffe/_caffe.so' failed
安装caffe-ssd编译环境的时候报错: python/caffe/_caffe.cpp:10:31: fatal error: numpy/arrayobject.h: No such file ...
- linux C access
[1]作用 确定文件的访问权限 [2]头文件 #include <unistd.h> [3]函数定义 int access(const char * pathname, int mode ...
- js与jQuery的区别——每日一记录
js是一种脚本语言,jQuery是在他基础上的一种框架