php數(shù)組函數(shù)array_key_exists()小結(jié)
array_key_exists()函數(shù)判斷某個(gè)數(shù)組中是否存在指定的key,如果key存在,則返回true,否則返回flase
array_key_exists(key,array);
key:必需。規(guī)定鍵名
array:必需。規(guī)定輸入的數(shù)組
<?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 需要去遍歷值 遍歷到了才跳出循環(huán)
追問:
是不是數(shù)組的索引有單獨(dú)的存儲(chǔ)單元,而且優(yōu)化過,array_key_exists的時(shí)間復(fù)雜度是o(1), 而in_array是o(n) ??
追答:
重復(fù)雜度來說是這樣
array_key_exists 是判斷某個(gè)鍵有沒有值
in_array 要遍歷一次 獲取是否相同 不知道建的情況下必須遍歷
PHP中isset與array_key_exists的區(qū)別
1.對(duì)于數(shù)組值的判斷不同,對(duì)于值為null或''或false,isset返回false,array_key_exists返回true;
2. 執(zhí)行效率不同,isset是內(nèi)建運(yùn)算符,array_key_exists是php內(nèi)置函數(shù),isset要快一些。請(qǐng)參考:PHP 函數(shù)實(shí)現(xiàn)原理及性能分析
3.當(dāng)用isset訪問一個(gè)不存在索引數(shù)組值時(shí),不會(huì)引起一個(gè)E_NOTICE的php錯(cuò)誤消息;
4.array_key_exists 會(huì)調(diào)用get_defined_vars判斷數(shù)組變量是否存在,isset不用;
測(cè)試代碼:
<?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數(shù)組查找函數(shù)in_array()、array_search()、array_key_exists()使用實(shí)例
- php數(shù)組函數(shù)序列之a(chǎn)rray_key_exists() - 查找數(shù)組鍵名是否存在
- PHP實(shí)現(xiàn)簡(jiǎn)易blog的制作
- 詳解php中 === 的使用
- PHP判斷表達(dá)式中括號(hào)是否匹配的簡(jiǎn)單實(shí)例
- php mysql訪問數(shù)據(jù)庫的步驟詳解
- 詳解PHP編碼轉(zhuǎn)換函數(shù)應(yīng)用技巧
- php array_key_exists() 與 isset() 的區(qū)別
相關(guān)文章
PHP7基于curl實(shí)現(xiàn)的上傳圖片功能
這篇文章主要介紹了PHP7基于curl實(shí)現(xiàn)的上傳圖片功能,結(jié)合實(shí)例形式對(duì)比分析了php5.5之前與php7版本的curl圖片上傳功能相關(guān)實(shí)現(xiàn)與使用技巧,需要的朋友可以參考下2018-05-05mac系統(tǒng)下安裝多個(gè)php并自由切換的方法詳解
本文主要介紹了在mac系統(tǒng)下安裝多個(gè)php并自由切換的方法,文中先介紹了安裝多版本php的方法以及遇到相關(guān)錯(cuò)誤的解決方法,版本切換主要是利用php-version工具,php-version是一個(gè)幫助管理從brew安裝的php版本切換的工具,需要的朋友可以參考,下面來一起看看吧。2017-04-04晉城吧對(duì)DiscuzX進(jìn)行的前端優(yōu)化要點(diǎn)
晉城吧的服務(wù)器在美國,延遲相對(duì)國內(nèi)略微要高一些,所以優(yōu)化就顯得非常重要。2010-09-09php 備份數(shù)據(jù)庫代碼(生成word,excel,json,xml,sql)
本篇文章是對(duì)php備份數(shù)據(jù)庫代碼(生成word,excel,json,xml,sql)進(jìn)行了詳細(xì)的分析介紹,需要的朋友參考下2013-06-06