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 相关文章推荐
PHP 裁剪图片成固定大小代码方法
Sep 09 PHP
php debug 安装技巧
Apr 30 PHP
解析PHP自带的进位制之间的转换函数
Jun 08 PHP
查找php配置文件php.ini所在路径的二种方法
May 26 PHP
Discuz批量替换帖子内容的方法(使用SQL更新数据库)
Jun 23 PHP
php socket客户端及服务器端应用实例
Jul 04 PHP
php将12小时制转换成24小时制的方法
Mar 31 PHP
php基于PDO连接MSSQL示例DEMO
Jul 13 PHP
thinkPHP5.0框架简单配置作用域的方法
Mar 17 PHP
PHP基于PDO实现的SQLite操作类【包含增删改查及事务等操作】
Jun 21 PHP
php简单实现单态设计模式的方法分析
Jul 28 PHP
PHP PDO和消息队列的个人理解与应用实例分析
Nov 25 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
ionCube 一款类似zend的PHP加密/解密工具
2010/07/25 PHP
PHP实现批量删除(封装)
2017/04/28 PHP
php实现查询功能(数据访问)
2017/05/23 PHP
jquery.messager.js插件导致页面抖动的解决方法
2013/07/14 Javascript
js获取location.href的参数实例代码
2013/08/02 Javascript
JavaScript判断对象是否为数组
2015/12/22 Javascript
Easyui Treegrid改变默认图标的方法
2016/04/29 Javascript
jQuery+CSS实现一个侧滑导航菜单代码
2016/05/09 Javascript
JavaScript实现窗口抖动效果
2016/10/19 Javascript
jQuery插件Echarts实现的双轴图效果示例【附demo源码下载】
2017/03/04 Javascript
jquery实现图片上传前本地预览
2017/04/28 jQuery
基于jquery日历价格、库存等设置插件
2020/07/05 jQuery
react native仿微信PopupWindow效果的实例代码
2017/08/07 Javascript
Material(包括Material Icon)在Angular2中的使用详解
2018/02/11 Javascript
vue2.x集成百度UEditor富文本编辑器的方法
2018/09/21 Javascript
解决v-for中使用v-if或者v-bind:class失效的问题
2018/09/25 Javascript
Vue实现简易计算器
2020/02/25 Javascript
vue el-tree 默认展开第一个节点的实现代码
2020/05/15 Javascript
手把手教你如何编译打包video.js
2020/12/09 Javascript
python登陆asp网站页面的实现代码
2015/01/14 Python
JS设计模式之责任链模式实例详解
2018/02/03 Python
详解tensorflow载入数据的三种方式
2018/04/24 Python
Python使用cx_Oracle模块操作Oracle数据库详解
2018/05/07 Python
python脚本当作Linux中的服务启动实现方法
2019/06/28 Python
django+echart数据动态显示的例子
2019/08/12 Python
Python Scrapy框架第一个入门程序示例
2020/02/05 Python
深入浅析python变量加逗号,的含义
2020/02/22 Python
Jupyter notebook如何修改平台字体
2020/05/13 Python
纯css3使用vw和vh实现自适应的方法
2018/02/09 HTML / CSS
美国知名的时尚购物网站:Anthropologie
2016/12/22 全球购物
全球领先的中国制造商品在线批发平台:DHgate
2020/01/28 全球购物
Shell编程面试题
2012/05/30 面试题
人事行政经理岗位职责
2014/06/18 职场文书
八荣八耻演讲稿
2014/09/15 职场文书
安全教育主题班会教案
2015/08/12 职场文书
思想品德课教学反思
2016/02/24 职场文书