이 글은 php array 함수 array_key_exists()에 대한 관련 지식과 in_array와의 성능 비교, isset와의 차이점 분석을 매우 자세하게 요약하고 소개합니다. 그것을 참조하십시오.
array_key_exists() 함수는 지정된 키가 배열에 있는지 확인합니다. 키가 있으면 true를 반환하고, 그렇지 않으면 false
array_key_exists(key,array);
key를 반환합니다. 키 이름
배열 지정: 필수. 입력 배열을 지정합니다
<?php $a = array('a'=>'Dog','b'=>'Cat'); if(array_key_exists('a',$a)){ echo 'Key exists!'; } else{ echo 'Key does not exist!'; } ?>
출력: 키가 존재합니다!
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 중국어 웹사이트의 기타 관련 기사를 참조하세요!