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 = " ...
随机推荐
- SetTimer API函数
位于user32.dll中,可以每隔一段时间执行一段时间执行一件事的时候,可以使用它. 使用定时器,通常告诉Windows一个时间间隔,然后Windows以此时间间隔周期性触发程序. 发送WM_TIM ...
- Python学习之旅(三十)
Python基础知识(29):virtualenv virtualenv:用来为一个应用创建一套隔离的Python运行环境 比如,现有两个Python项目,一个是Python2.7的一个是Python ...
- Linux命令 printf
定长: $ printf '%s\t%s\t%s\t%s\t%s\t\n' $(cat printf.txt) # %s 表示一个不固定长度的字符串:printf不是管道命令,因此需要通过类似cat的 ...
- HDU 1241 - Oil Deposits - [BFS]
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1241 题意: 求某块平面上,连通块的数量.一个油田格子若周围八个方向也有一个油田格子,则认为两者相连通 ...
- WebService,ESB笔记
一.WebService是什么? WebService,是RPC的一样实现方式. RPC(Remote Procedure Call Protocol)--远程过程调用协议,它是一种通过网络从远程计算 ...
- js多选下拉框
1.js原生实现 1.1:引用JS文件 /*! jQuery v1.12.4 | (c) jQuery Foundation | jquery.org/license */ !function(a,b ...
- toolbar按钮添加图标
需要toolbar关联imagelist组件,imagelist组件添加需要的图片,在toolbar新建按钮,按钮中选择相应图表.
- 安装和使用ZFS
一.安装和使用ZFS Centos7上安装和使用ZFS:https://blog.csdn.net/linuxnews/article/details/51286358
- Python四线程爬取西刺代理
import requests from bs4 import BeautifulSoup import lxml import telnetlib #验证代理的可用性 import pymysql. ...
- https://github.com/tensorflow/models/blob/master/research/slim/datasets/preprocess_imagenet_validation_data.py 改编版
#!/usr/bin/env python # Copyright 2016 Google Inc. All Rights Reserved. # # Licensed under the Apach ...