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 相关文章推荐
MySQL修改密码方法总结
Mar 25 PHP
php at(@)符号的用法简介
Jul 11 PHP
PHP 裁剪图片成固定大小代码方法
Sep 09 PHP
PHP自定义函数收代码
Aug 01 PHP
基于Discuz security.inc.php代码的深入分析
Jun 03 PHP
PHP实现二维数组去重功能示例
Jan 12 PHP
PHP 配置后台登录以及模板引入
Jan 24 PHP
浅谈PHP错误类型及屏蔽方法
May 27 PHP
ThinkPHP5 验证器的具体使用
May 31 PHP
PHP使用pdo连接access数据库并循环显示数据操作示例
Jun 05 PHP
PHP XML Expat解析器知识点总结
Feb 15 PHP
PHP实现文件上传与下载
Aug 28 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 Session变量不能传送到下一页的解决方法
2009/11/27 PHP
解析php中session的实现原理以及大网站应用应注意的问题
2013/06/17 PHP
一个简单安全的PHP验证码类 附调用方法
2016/06/24 PHP
PHP树形结构tree类用法示例
2019/02/01 PHP
js 页面刷新location.reload和location.replace的区别小结
2009/12/24 Javascript
关于jquery动态增减控件的一些想法和小插件
2010/08/01 Javascript
纯javascript移动优先的幻灯片效果
2015/11/02 Javascript
每天一篇javascript学习小结(Array数组)
2015/11/11 Javascript
javascript实现动态统计图开发实例
2015/11/21 Javascript
学习掌握JavaScript中this的使用技巧
2016/08/29 Javascript
js 打开新页面在屏幕中间的实现方法
2016/11/02 Javascript
详解Vue中的自定义指令
2020/12/07 Vue.js
[01:06:19]DOTA2-DPC中国联赛定级赛 LBZS vs SAG BO3第二场 1月8日
2021/03/11 DOTA
浅谈python新手中常见的疑惑及解答
2016/06/14 Python
python中的字典操作及字典函数
2018/01/03 Python
Python Flask基础教程示例代码
2018/02/07 Python
解决pyinstaller打包pyqt5的问题
2019/01/08 Python
anaconda中更改python版本的方法步骤
2019/07/14 Python
python2.7实现复制大量文件及文件夹资料
2019/08/31 Python
Python MySQLdb 执行sql语句时的参数传递方式
2020/03/04 Python
Python通过Tesseract库实现文字识别
2020/03/05 Python
tensorflow 20:搭网络,导出模型,运行模型的实例
2020/05/26 Python
HTML5+CSS3 诱人的实例:3D立方体旋转动画实例
2016/12/30 HTML / CSS
英国一家专门出售品牌鞋子的网站:Allsole
2016/08/07 全球购物
NEW LOOK官网:英国时装零售巨头之一,快时尚品牌
2017/01/11 全球购物
Sunglasses Shop德国站:欧洲排名第一的太阳镜网站
2017/08/01 全球购物
当当网官方旗舰店:中国图书销售夺金品牌
2018/04/02 全球购物
美国嘻哈文化生活方式品牌:GLD
2018/04/15 全球购物
澳大利亚现代波西米亚风格女装网站:Bohemian Traders
2018/04/16 全球购物
毕业生应聘幼儿园的自荐信
2013/11/20 职场文书
结婚典礼证婚词
2014/01/11 职场文书
服务标语口号
2014/07/01 职场文书
导游词之重庆钓鱼城
2019/09/19 职场文书
迎客户欢迎词三篇
2019/09/27 职场文书
CSS3实现列表无限滚动/轮播效果
2021/06/23 HTML / CSS
win10拖拽文件时崩溃怎么解决?win10文件不能拖拽问题解决方法
2022/08/14 数码科技