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图片处理:加水印、缩略图的实现(自定义函数:watermark、thumbnail)
Dec 02 PHP
php 无法加载mysql的module的时候的配置的解决方案引发的思考
Jan 27 PHP
php根据年月获取季度的方法
Mar 31 PHP
thinkphp中session和cookie无效的解决方法
Dec 19 PHP
微信公众平台接口开发入门示例
Dec 24 PHP
PHP去除字符串最后一个字符的三种方法实例
Mar 01 PHP
thinkphp3.2实现在线留言提交验证码功能
Jul 19 PHP
php使用curl伪造来源ip和refer的方法示例
May 08 PHP
TP5(thinkPHP5框架)基于bootstrap实现的单图上传插件用法示例
May 29 PHP
PHP使用ajax的post方式下载excel文件简单示例
Aug 06 PHP
php 多进程编程父进程的阻塞与非阻塞实例分析
Feb 22 PHP
解析laravel使用workerman用户交互、服务器交互
Apr 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中的登陆login
2007/01/18 PHP
个人写的PHP验证码生成类分享
2014/08/21 PHP
php实现的Cookies操作类实例
2014/09/24 PHP
浅谈PHP的反射机制
2016/12/15 PHP
(JS实现)MapBar中坐标的加密和解密的脚本
2007/05/16 Javascript
JS 拼图游戏 面向对象,注释完整。
2009/06/18 Javascript
web基于浏览器的本地存储方法应用
2012/11/27 Javascript
js的alert弹出框出现乱码解决方案
2013/09/02 Javascript
js中switch case循环实例代码
2013/12/30 Javascript
js中opener与parent的区别详细解析
2014/01/14 Javascript
使用AngularJS中的SCE来防止XSS攻击的方法
2015/06/18 Javascript
深入理解jQuery之防止冒泡事件
2016/05/24 Javascript
js修改onclick动作的四种方法(推荐)
2016/08/18 Javascript
DOM 事件的深入浅出(一)
2016/12/05 Javascript
概述BootStrap中role=&quot;form&quot;及role作用角色
2016/12/08 Javascript
Angular.JS中的this指向详解
2017/05/17 Javascript
浅谈react.js中实现tab吸顶效果的问题
2017/09/06 Javascript
js循环map 获取所有的key和value的实现代码(json)
2018/05/09 Javascript
JS实现数组删除指定元素功能示例
2019/06/05 Javascript
[59:35]DOTA2-DPC中国联赛定级赛 Aster vs DLG BO3第一场 1月8日
2021/03/11 DOTA
在Python中使用元类的教程
2015/04/28 Python
python中sleep函数用法实例分析
2015/04/29 Python
Python编程把二叉树打印成多行代码
2018/01/04 Python
python opencv实现图片旋转矩形分割
2018/07/26 Python
pycharm运行程序时看不到任何结果显示的解决
2020/02/21 Python
Python实现弹球小游戏
2020/08/01 Python
Python selenium爬取微信公众号文章代码详解
2020/08/12 Python
用Python制作mini翻译器的实现示例
2020/08/17 Python
X/HTML5 和 XHTML2
2008/10/17 HTML / CSS
英国绿色商店:Natural Collection
2019/05/03 全球购物
销售顾问岗位职责
2014/02/25 职场文书
喷漆工的岗位职责
2014/03/17 职场文书
幼儿园小班家长寄语
2014/04/02 职场文书
2014年房地产工作总结范文
2014/11/19 职场文书
2019年公司卫生管理制度样本
2019/08/21 职场文书
Win11怎么解除儿童账号限制?Win11解除微软儿童账号限制方法
2022/07/07 数码科技