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教程孙仲岳主讲
Jan 07 PHP
PHP Session_Regenerate_ID函数双释放内存破坏漏洞
Jan 27 PHP
php中3des加密代码(完全与.net中的兼容)
Aug 02 PHP
PHP引用符&amp;的用法详细解析
Aug 22 PHP
php使用$_POST或$_SESSION[]向js函数传参
Sep 16 PHP
Thinkphp模板标签if和eq的区别和比较实例分析
Jul 01 PHP
PHP使用redis实现统计缓存mysql压力的方法
Nov 14 PHP
PHP curl模拟登录带验证码的网站
Nov 30 PHP
PHP框架自动加载类文件原理详解
Jun 06 PHP
PHP+Ajax实现的无刷新分页功能详解【附demo源码下载】
Jul 03 PHP
PHP实现的分页类定义与用法示例
Jul 05 PHP
如何在PHP中使用数组
Jun 09 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
[EPIC] Larva vs Flash ZvT @ Crossing Field [2017-10-09]
2020/03/17 星际争霸
PHP实现文件上传与下载实例与总结
2016/03/13 PHP
Symfony控制层深入详解
2016/03/17 PHP
解决form中action属性后面?传递参数 获取不到的问题
2017/07/21 PHP
ajax处理php返回json数据的实例代码
2013/01/24 Javascript
JavaScript设置首页和收藏页面的小例子
2013/11/11 Javascript
jQuery截取指定长度字符串的实现原理及代码
2014/07/01 Javascript
jQuery实现定时读取分析xml文件的方法
2015/07/16 Javascript
WordPress中利用AJAX异步获取评论用户头像的方法
2016/01/08 Javascript
JavaScript+Java实现HTML页面转为PDF文件保存的方法
2016/05/30 Javascript
妙用Bootstrap的 popover插件实现校验表单提示功能
2016/08/29 Javascript
VUE JS 使用组件实现双向绑定的示例代码
2017/01/10 Javascript
Angular2开发——组件规划篇
2017/03/28 Javascript
使用jQuery实现页面定时弹出广告效果
2017/08/24 jQuery
vue中阻止click事件冒泡,防止触发另一个事件的方法
2018/02/08 Javascript
详解webpack打包时排除其中一个css、js文件或单独打包一个css、js文件(两种方法)
2018/10/26 Javascript
[50:28]LGD女子学院第三期 DOTA2复仇之魂教学
2013/12/24 DOTA
利用TensorFlow训练简单的二分类神经网络模型的方法
2018/03/05 Python
在Python中字符串、列表、元组、字典之间的相互转换
2019/11/15 Python
python实现拉普拉斯特征图降维示例
2019/11/25 Python
python+selenium+chrome实现淘宝购物车秒杀自动结算
2021/01/07 Python
matplotlib部件之套索Lasso的使用
2021/02/24 Python
css3个性化字体_动力节点Java学院整理
2017/07/12 HTML / CSS
CSS3动画效果回调处理详解
2014/12/10 HTML / CSS
使用phonegap进行本地存储的实现方法
2017/03/31 HTML / CSS
英国时尚运动品牌的合集:The Sports Edit
2017/12/20 全球购物
全球销量第一生发产品:Viviscal
2017/12/21 全球购物
Under Armour西班牙官网:美国知名的高端功能性运动品牌
2018/12/12 全球购物
预备党员入党思想汇报
2014/01/04 职场文书
爱心活动计划书
2014/04/26 职场文书
党员政治学习材料
2014/05/14 职场文书
运动会报道稿300字
2014/10/02 职场文书
《三国志》赏析
2019/08/27 职场文书
5人制售《绝地求生》游戏外挂获利500多万元 被判刑
2022/03/31 其他游戏
《王者天下》第4季首话新剧照 4月9日正式开播
2022/04/07 日漫
vue3不同环境下实现配置代理
2022/05/25 Vue.js