>백엔드 개발 >PHP 튜토리얼 >PHP 배열 함수 array_key_exists()_php 기술 요약

PHP 배열 함수 array_key_exists()_php 기술 요약

WBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWB
WBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWB원래의
2016-05-16 20:03:191326검색

array_key_exists() 함수는 지정된 키가 배열에 존재하는지 여부를 확인합니다. 키가 존재하면 true를 반환하고, 그렇지 않으면 false를 반환합니다.

array_key_exists(키, 배열);

키: 필수입니다. 키 이름 지정
배열: 필수입니다. 입력 배열을 지정합니다

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

출력: 키가 존재합니다!

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_define_vars를 호출하여 배열 변수가 존재하는지 확인하고 isset은 사용되지 않습니다.

테스트 코드:

<&#63;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";

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.