이 두 가지 예를 생각해 봅시다.
$key = 'jim';
// example 1 if (isset($array[$key])) {
// ... }
// example 2
if (array_key_exists($key, $array)) {
// ... }
둘 중 어느 쪽이 더 나은지 알고 싶습니다.저는 항상 첫 번째 예제를 사용했지만, 이 사이트에서 두 번째 예제를 사용하는 사람들을 많이 봐왔습니다.
그럼, 어떤 게 더 나을까요?더 빨리?명확한 의도?
질문에 대한 답변
isset()
더 빠르긴 한데…array_key_exists()
.
array_key_exists()
값이 다음과 같은 경우에도 키가 존재하는지 여부를 순수하게 확인합니다.NULL
.
반면에.isset()
돌아온다false
키가 존재하고 가치가 있는 경우NULL
.
최근에 실시한 테스트에 관심이 있는 경우:
https://stackoverflow.com/a/21759158/520857
요약:.
Method Name
Run time
Difference =========================================================================================
NonExistant::noCheckingTest()
0.86004090309143
+18491.315775911%
NonExistant::emptyTest()
0.0046701431274414
+0.95346080503016%
NonExistant::isnullTest()
0.88424181938171
+19014.461681183%
NonExistant::issetTest()
0.0046260356903076
Fastest
NonExistant::arrayKeyExistsTest()
1.9001779556274
+209.73055713%
Php 7을 사용하면 Null 병합 연산자를 사용할 수 있습니다.
null coalesing 연산자(?)는 Isset()와 함께 삼원소를 사용해야 하는 일반적인 경우에 통사 당으로 첨가되었다.NULL이 아닌 경우 첫 번째 피연산자를 반환하고, 그렇지 않은 경우 두 번째 피연산자를 반환합니다.
따라서 값이 늘인 경우 또는 키가 존재하지 않는 경우 기본값을 할당할 수 있습니다.
$var = $array[$key] ?? 'default value'
음, 가장 큰 차이점은isset()
돌아오지 않다true
null 값에 대응하는 어레이 키의 경우,array_key_exists()
한다.
소규모 벤치마크를 실행하면isset()
더 빠르긴 하지만 완전히 정확하지는 않을 수도 있습니다.
나는 중간 출구를 놓쳤기 때문에 이 질문에 내 2센트를 더하고 싶었다.
이미 말한 바와 같이isset()
키의 값을 평가하여 반환한다.false
만약 그 값이null
어디에array_key_exists()
는 키가 배열에 존재하는지 여부만 확인합니다.
PHP 7을 사용하여 간단한 벤치마크를 실행했는데, 표시된 결과는 반복을 완료하는 데 소요된 시간입니다.
$a = [null, true];
isset($a[0])
# 0.3258841
- false isset($a[1])
# 0.28261614 - true isset($a[2])
# 0.26198816 - false
array_key_exists(0, $a)
# 0.46202087 - true array_key_exists(1, $a)
# 0.43063688 - true array_key_exists(2, $a)
# 0.37593913 - false
isset($a[0])
array_key_exists(0, $a) # 0.66342998 - true isset($a[1])
array_key_exists(1, $a) # 0.28389215 - true isset($a[2])
array_key_exists(2, $a) # 0.55677581 - false
array_key_isset(0, $a)
# 1.17933798 - true array_key_isset(1, $a)
# 0.70253706 - true array_key_isset(2, $a)
# 1.01110005 - false
이 커스텀 함수의 결과도 이 벤치마크와 함께 추가했습니다.
function array_key_isset($k, $a){
return isset($a[$k])
array_key_exists($k, $a); }
이미 말한 바와 같이isset()
가장 빠른 방법이지만 값이 다음과 같으면 false를 반환할 수 있습니다.null
이것은 바람직하지 않은 결과를 가져올 수 있으며, 보통 사용자는 다음을 사용해야 합니다.array_key_exists()
만약 그렇다면.
하지만 중간 출구가 있고, 그것은 이 시스템을 사용하는 것입니다.isset()
array_key_exists()
이 코드는 일반적으로 더 빠른 기능을 사용합니다.isset()
그리고 만약 isset()
false를 반환한 후 사용합니다.array_key_exists()
검증할 수 있습니다.위의 표에 나타나 있듯이, 이는 쉽게 호출할 수 있는 속도만큼 빠릅니다.isset()
.
네, 쓰는 게 좀 더 느리지만 함수로 묶는 게 훨씬 쉬워요.퍼포먼스나 빅 데이터 체크 등 필요한 경우는, 풀로 기입해 주세요.그 이외의 경우는, 1 회분의 사용으로 기능상의 오버헤드가 매우 적은 경우입니다.array_key_isset()
무시할 수 있습니다.