本文為大家總結了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不用;
測試程式碼:
<?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 array_key_exists()陣列函數使用詳解的詳細內容。更多資訊請關注PHP中文網其他相關文章!