Home  >  Article  >  Backend Development  >  Detailed explanation of the use of php array_key_exists() array function

Detailed explanation of the use of php array_key_exists() array function

怪我咯
怪我咯Original
2017-07-07 09:45:431336browse

This article summarizes the knowledge about php arrayfunctionarray_key_exists() and the performance comparison with in_array, and the difference analysis with isset, which is very For details, friends in need can refer to it.

array_key_exists() function determines whether the specified key exists in an array. If the key exists, it returns true, otherwise it returns false

array_key_exists(key,array);

key: required. Specify key name
array: required. Specify the input array

<?php
$a = array(&#39;a&#39;=>&#39;Dog&#39;,&#39;b&#39;=>&#39;Cat&#39;);
if(array_key_exists(&#39;a&#39;,$a)){
  echo &#39;Key exists!&#39;;
} else{
  echo &#39;Key does not exist!&#39;;
}
?>

Output: Key exists!

Why is array_key_exists faster than in_array?

array_key_exists and in_array query things are different
array_key_exists determine whether there is a key value
array_key_exists(a,arr)->if(isset(arr[a])) It is true

And in_array needs to traverse the value before jumping out of the loop

Question:
Does the index of the array have a separate storage unit and is optimized? The time complexity of array_key_exists is o(1), and in_array is o(n) ??

Follow-up answer:
In terms of complexity, this is the case

array_key_exists is to determine whether a certain key has No value

in_array To traverse once to obtain whether they are the same, you must traverse if you don’t know the construction

The difference between isset and array_key_exists in PHP

1. The judgment of array values ​​is different. If the value is null or '' or false, isset returns false, and array_key_exists returns true;

2. The execution efficiency is different, isset is a built-inoperator, array_key_exists is phpbuilt-in function, isset is faster. Please refer to: PHP function implementation principle and performance analysis

3. When using isset to access a non-existent index array value, it will not cause a PHP error message of E_NOTICE;

4.array_key_exists will Call get_defined_vars to determine whether the array variable exists, isset is not used;

Test code:

<?php
function
microtime_float()
{
list($usec, $sec) = explode(" ", microtime());
return ((float)$usec + (float)$sec);
}
$test_arr[&#39;aa&#39;]=&#39;dd&#39;;
$test_arr[&#39;bb&#39;]=&#39;&#39;;
$test_arr[&#39;cc&#39;]=NULL;
$test_arr[&#39;dd&#39;]=false;
$test_arr= array(&#39;aa&#39;=>&#39;dd&#39;,&#39;bb&#39;=>&#39;&#39;,&#39;cc&#39;=>null,&#39;dd&#39;=>false);
echo "isset aa is ";var_dump(isset($test_arr[&#39;aa&#39;]));echo "n";
echo "isset bb is ";var_dump(isset($test_arr[&#39;bb&#39;]));echo "n";
echo "isset cc is ";var_dump(isset($test_arr[&#39;cc&#39;]));echo "n";
echo "isset dd is ";var_dump(isset($test_arr[&#39;cc&#39;]));echo "n";
echo "isset none is ";var_dump(isset($test_arr[&#39;none&#39;]));echo "n";
echo "key_exist aa is ";var_dump(array_key_exists(&#39;aa&#39;,$test_arr));echo "n";
echo "key_exist bb is ";var_dump(array_key_exists(&#39;bb&#39;,$test_arr));echo "n";
echo "key_exist cc is ";var_dump(array_key_exists(&#39;cc&#39;,$test_arr));echo "n";
echo "key_exist dd is ";var_dump(array_key_exists(&#39;dd&#39;,$test_arr));echo "n";
echo "key_exist none is ";var_dump(array_key_exists(&#39;none&#39;,$test_arr));echo "n";
$time_start = microtime_float();
for($i=0;$i<100;$i++){
isset($test_arr[&#39;aa&#39;]);
}
$time_end = microtime_float();
$time = $time_end - $time_start;
echo "isset 100 is $timen";
for($i=0;$i<10000;$i++){
isset($test_arr[&#39;aa&#39;]);
}
$time_end = microtime_float();
$time = $time_end - $time_start;
echo "isset 10000 is $timen";
for($i=0;$i<1000000;$i++){
isset($test_arr[&#39;aa&#39;]);
}
$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(&#39;aa&#39;,$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(&#39;aa&#39;,$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(&#39;aa&#39;,$test_arr);
}
$time_end = microtime_float();
$time = $time_end - $time_start;
echo "array_key_exists 1000000 is $timen";

The above is the detailed content of Detailed explanation of the use of php array_key_exists() array function. For more information, please follow other related articles on the PHP Chinese website!

Statement:
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn