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 = " ...
随机推荐
- 《JavaScript》 程序基本知识 数据类型。 {0912上} {0912下}
JS脚本语言: 这是JaxaScript的全称名 JS是网页里面使用的脚本语言 JS是一个非常强大的语言 JS的基础语法 注释语法: 单行注释 // 多行注释 /**/ 输出语法: 双标 ...
- python全栈开发 * 32知识点汇总 * 180717
32 网络编程 (一)一.架构 定义:程序员开发的一种模式. 分类: C/S 架构 C/S即:Client与Server , 客户端/ 服务器模式 . 缺点 : 冗余 B/S 架构 Browser与S ...
- Java随机字符串:随机数字字符串,工具类
Java中生成随机数,字符串的工具类 1. 调用方法需要传入生成字符串的长度和需要的类型 生成随机数字 生成随机字母字符串 生成随机字符串+数字等 ......... 2. 总共8种类型,具体看工具类 ...
- 20190422 SQL SERVER 服务
-- 数据库服务-- SQL Server(MSSQLSERVER)是必须要开启的,这个是数据库引擎服务,就像汽车的发动机一样-- SQL Server代理(MSSQLSERVER)是代理服务,比如你 ...
- node os模块
const os = require('os'); console.log(os.homedir()); console.log(os.hostname()); console.log(os.plat ...
- [py]js前端求和与flask后端求和
index.html <!DOCTYPE html> <html lang="en"> <head> <meta charset=&quo ...
- 小程序movable-area置于顶层遮盖下方元素无法操作的解决方案
小程序项目中有个需求,右下角按钮可以在页面中随意拖动,此时查看文档找到了一个自带的标签可以实现此功能,代码如下 <movable-area> <movable-view x=&quo ...
- 【Algorithm】-NO.140.Algorithm.1.Algorithm.1.001-【空间复杂度 时间复杂度 o(1), o(n), o(logn), o(nlogn)】-
Style:Mac Series:Java Since:2018-09-10 End:2018-09-10 Total Hours:1 Degree Of Diffculty:5 Degree Of ...
- 12.C# 接口和抽象类的区别
1.抽象类 声明方法的存在而不去实现它的类叫做抽象类,抽象类用abstract关键字声明.抽象类主要用来规定某些类的基本特征,继承它的子类必须实现抽象类的抽象成员,否则这个子类也为抽象类. publi ...
- redis----------windows下安装redis以及PHP的redis扩展
1.redis简介 redis是一个key-value存储系统.和Memcached类似,它支持存储的value类型相对更多,包括string(字符串).list(链表).set(集合).zset(s ...