php array_key_exists()數組函數使用詳解

來源:互聯網
上載者:User
本文給大家匯總介紹了php數組函數array_key_exists()的相關知識以及與in_array的效能對比,與isset的區別分析,非常的詳細,有需要的小夥伴可以參考下。

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不用;

  測試代碼:

<?phpfunctionmicrotime_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";

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.