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维护文件系统
Oct 09 PHP
php AJAX实例根据邮编自动完成地址信息
Nov 23 PHP
php escape URL编码
Dec 10 PHP
php解压文件代码实现php在线解压
Feb 13 PHP
php读取csv数据保存到数组的方法
Jan 03 PHP
CodeIgniter常用知识点小结
May 26 PHP
微信公众平台开发(五) 天气预报功能开发
Dec 03 PHP
php删除txt文件指定行及按行读取txt文档数据的方法
Jan 30 PHP
总结一些PHP中好用但又容易忽略的小知识
Jun 02 PHP
PHP使用ActiveMQ实例
Feb 05 PHP
调试php程序的简单步骤
Oct 04 PHP
Thinkphp5框架异常处理操作实例分析
Jun 03 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写的serv-u的web申请账号的程序
2006/10/09 PHP
PHP中操作ini配置文件的方法
2013/04/25 PHP
PHP中快速生成随机密码的几种方式
2017/04/17 PHP
PHP实现的简单异常处理类示例
2017/05/04 PHP
判断脚本加载是否完成的方法
2009/05/26 Javascript
window.open不被拦截的实现代码
2012/08/22 Javascript
jquery中交替点击事件toggle方法的使用示例
2013/12/08 Javascript
js面向对象编程之如何实现方法重载
2014/07/02 Javascript
逐一介绍Jquery data()、Jquery stop()、jquery delay()函数(详)
2015/11/04 Javascript
js组件SlotMachine实现图片切换效果制作抽奖系统
2016/04/17 Javascript
JS求解三元一次方程组值的方法
2017/01/03 Javascript
ES6新特性四:变量的解构赋值实例
2017/04/21 Javascript
jQuery使用eraser.js插件实现擦除、刮刮卡效果的方法【附eraser.js下载】
2017/04/28 jQuery
Bootstrap实现的标签页内容切换显示效果示例
2017/05/25 Javascript
Vue.js对象转换实例
2017/06/07 Javascript
JavaScript初学者必看“new”
2017/06/12 Javascript
在Vue中使用echarts的方法
2018/02/05 Javascript
浅谈layui框架自带分页和表格重载的接口解析问题
2019/09/11 Javascript
微信小程序商品详情页底部弹出框
2019/11/22 Javascript
[42:24]完美世界DOTA2联赛循环赛 LBZS vs DM BO2第一场 11.01
2020/11/02 DOTA
Python urls.py的三种配置写法实例详解
2017/04/28 Python
Python类中方法getitem和getattr详解
2019/08/30 Python
moosejaw旗下的户外商品促销网站:Mountain Steals
2017/02/27 全球购物
欧洲第一中国智能手机和平板电脑网上商店:CECT-SHOP
2018/01/08 全球购物
奥地利手表、香水、化妆品和珠宝购物网站:Brasty.at
2021/01/17 全球购物
财务会计应届生求职信
2013/11/24 职场文书
旅游管理毕业生自荐信范文
2014/03/19 职场文书
劲霸男装广告词改编版
2014/03/21 职场文书
《海底世界》教学反思
2014/04/16 职场文书
2014离婚协议书范文(3篇)
2014/11/29 职场文书
2014年政府采购工作总结
2014/12/09 职场文书
幼儿园庆元旦主持词
2015/07/06 职场文书
详解MySQL中的pid与socket
2021/06/15 MySQL
Python办公自动化PPT批量转换操作
2021/09/15 Python
Python集合的基础操作
2021/11/01 Python
CentOS7安装GlusterFS集群以及相关配置
2022/04/12 Servers