php数组函数array_key_exists()小结


Posted in PHP onDecember 10, 2015

array_key_exists()函数判断某个数组中是否存在指定的key,如果key存在,则返回true,否则返回flase

array_key_exists(key,array);

key:必需。规定键名
array:必需。规定输入的数组

<?php
$a = array('a'=>'Dog','b'=>'Cat');
if(array_key_exists('a',$a)){
  echo 'Key exists!';
} else{
  echo 'Key does not exist!';
}
?>

输出:Key exists!

array_key_exists为什么比in_array快?

array_key_exists 和 in_array 查询的东西都不一样吧
array_key_exists 判断是否有键值
array_key_exists(a,arr)->if(isset(arr[a]))就是true

而in_array 需要去遍历值 遍历到了才跳出循环

追问:
是不是数组的索引有单独的存储单元,而且优化过,array_key_exists的时间复杂度是o(1), 而in_array是o(n) ??

追答:
重复杂度来说是这样

array_key_exists  是判断某个键有没有值

in_array  要遍历一次 获取是否相同 不知道建的情况下必须遍历

PHP中isset与array_key_exists的区别

1.对于数组值的判断不同,对于值为null或''或false,isset返回false,array_key_exists返回true;

2. 执行效率不同,isset是内建运算符,array_key_exists是php内置函数,isset要快一些。请参考:PHP 函数实现原理及性能分析

3.当用isset访问一个不存在索引数组值时,不会引起一个E_NOTICE的php错误消息;

4.array_key_exists 会调用get_defined_vars判断数组变量是否存在,isset不用;

测试代码:

<?php
function
microtime_float()
{
list($usec, $sec) = explode(" ", microtime());
return ((float)$usec + (float)$sec);
}
$test_arr['aa']='dd';
$test_arr['bb']='';
$test_arr['cc']=NULL;
$test_arr['dd']=false;
$test_arr= array('aa'=>'dd','bb'=>'','cc'=>null,'dd'=>false);
echo "isset aa is ";var_dump(isset($test_arr['aa']));echo "n";
echo "isset bb is ";var_dump(isset($test_arr['bb']));echo "n";
echo "isset cc is ";var_dump(isset($test_arr['cc']));echo "n";
echo "isset dd is ";var_dump(isset($test_arr['cc']));echo "n";
echo "isset none is ";var_dump(isset($test_arr['none']));echo "n";
echo "key_exist aa is ";var_dump(array_key_exists('aa',$test_arr));echo "n";
echo "key_exist bb is ";var_dump(array_key_exists('bb',$test_arr));echo "n";
echo "key_exist cc is ";var_dump(array_key_exists('cc',$test_arr));echo "n";
echo "key_exist dd is ";var_dump(array_key_exists('dd',$test_arr));echo "n";
echo "key_exist none is ";var_dump(array_key_exists('none',$test_arr));echo "n";
$time_start = microtime_float();
for($i=0;$i<100;$i++){
isset($test_arr['aa']);
}
$time_end = microtime_float();
$time = $time_end - $time_start;
echo "isset 100 is $timen";
for($i=0;$i<10000;$i++){
isset($test_arr['aa']);
}
$time_end = microtime_float();
$time = $time_end - $time_start;
echo "isset 10000 is $timen";
for($i=0;$i<1000000;$i++){
isset($test_arr['aa']);
}
$time_end = microtime_float();
$time = $time_end - $time_start;
echo "isset 1000000 is $timen";
//++++++++++++++++++++++++++++++
$time_start = microtime_float();
for($i=0;$i<100;$i++){
array_key_exists('aa',$test_arr);
}
$time_end = microtime_float();
$time = $time_end - $time_start;
echo "array_key_exists 100 is $timen";
for($i=0;$i<10000;$i++){
array_key_exists('aa',$test_arr);
}
$time_end = microtime_float();
$time = $time_end - $time_start;
echo "array_key_exists 10000 is $timen";
for($i=0;$i<1000000;$i++){
array_key_exists('aa',$test_arr);
}
$time_end = microtime_float();
$time = $time_end - $time_start;
echo "array_key_exists 1000000 is $timen";
PHP 相关文章推荐
自动跳转中英文页面
Oct 09 PHP
PHP 数组教程 定义数组
Oct 23 PHP
PHP网页游戏学习之Xnova(ogame)源码解读(十四)
Jun 26 PHP
采用memcache在web集群中实现session的同步会话
Jul 05 PHP
完善CodeIgniter在IDE中代码提示功能的方法
Jul 19 PHP
WordPress主题中添加文章列表页页码导航的PHP代码实例
Dec 22 PHP
PHP经典算法集锦【经典收藏】
Sep 14 PHP
如何直接访问php实例对象中的private属性详解
Oct 12 PHP
win7 wamp 64位 php环境开启curl服务遇到的问题及解决方法
Sep 16 PHP
PHP实现给定一列字符,生成指定长度的所有可能组合示例
Jun 22 PHP
PHP实现创建一个RPC服务操作示例
Feb 23 PHP
PHP中国际化的字符串排序和比较对象详解
Aug 23 PHP
php封装的连接Mysql类及用法分析
Dec 10 #PHP
PHP多维数组遍历方法(2种实现方法)
Dec 10 #PHP
thinkPHP使用post方式查询时分页失效的解决方法
Dec 09 #PHP
分享php代码将360浏览器导出的favdb的sqlite数据库文件转换为html
Dec 09 #PHP
微信支付PHP SDK之微信公众号支付代码详解
Dec 09 #PHP
作为程序员必知的16个最佳PHP库
Dec 09 #PHP
学习php设计模式 php实现备忘录模式(Memento)
Dec 09 #PHP
You might like
PHP+DBM的同学录程序(2)
2006/10/09 PHP
PHP页面转UTF-8中文编码乱码的解决办法
2015/10/20 PHP
今天你说520了吗?不仅有php表白书还有java表白神器
2016/05/20 PHP
详解php框架Yaf路由重写
2017/06/20 PHP
Centos7安装swoole扩展操作示例
2020/03/26 PHP
发布一个高效的JavaScript分析、压缩工具 JavaScript Analyser
2007/11/30 Javascript
Javascript 获取滚动条位置等信息的函数
2009/09/08 Javascript
Javascript操作URL函数修改版
2013/11/07 Javascript
javascript实现选中复选框后相关输入框变灰不可用的方法
2015/08/11 Javascript
Bootstrap菜单按钮及导航实例解析
2016/09/09 Javascript
BootStrap 图片样式、辅助类样式和CSS组件的实例详解
2017/01/20 Javascript
教你5分钟学会用requirejs(必看篇)
2017/07/25 Javascript
深入理解vue.js中$watch的oldvalue与newValue
2017/08/07 Javascript
Thinkphp5微信小程序获取用户信息接口的实例详解
2017/09/26 Javascript
解决webpack无法通过IP地址访问localhost的问题
2018/02/22 Javascript
vue源码解析之事件机制原理
2018/04/21 Javascript
Vue如何获取数据列表展示
2019/12/11 Javascript
JS代码检查工具ESLint介绍与使用方法
2020/02/04 Javascript
精确查找PHP WEBSHELL木马的方法(1)
2011/04/12 Python
Python实现的Google IP 可用性检测脚本
2015/04/23 Python
Python中执行存储过程及获取存储过程返回值的方法
2017/10/07 Python
Python WXPY实现微信监控报警功能的代码
2017/10/20 Python
python3使用smtplib实现发送邮件功能
2018/05/22 Python
Python实现的远程文件自动打包并下载功能示例
2019/07/12 Python
Django REST Framework之频率限制的使用
2019/09/29 Python
Python图像处理库PIL的ImageDraw模块介绍详解
2020/02/26 Python
Python使用os.listdir和os.walk获取文件路径
2020/05/21 Python
CSS3属性 line-clamp控制文本行数的使用
2020/03/19 HTML / CSS
为什么在使用动态 SQL 语句时必须为低层数据库对象授予权限
2012/12/13 面试题
最新的大学生找工作自我评价
2013/09/29 职场文书
园林毕业生自我鉴定范文
2013/12/29 职场文书
党的群众路线教育实践活动个人整改措施范文
2014/11/04 职场文书
业务员岗位职责
2015/02/03 职场文书
北京爱情故事观后感
2015/06/12 职场文书
庆七一主持词
2015/06/29 职场文书
PyTorch device与cuda.device用法
2022/04/03 Python