isset ()과 array_key_exists ()의 차이점은 무엇입니까? [복제]
이 질문에는 이미 답변이 있습니다.
다음 두 함수 호출은 어떻게 비교합니까?
isset($a['key'])
array_key_exists('key', $a)
array_key_exists
키가 배열에 존재하는지 확실하게 알려주는 반면 키 / 변수가 존재 하고 아닌 경우 isset
에만 반환 true
합니다 .null
$a = array('key1' => 'フーバー', 'key2' => null);
isset($a['key1']); // true
array_key_exists('key1', $a); // true
isset($a['key2']); // false
array_key_exists('key2', $a); // true
또 다른 중요한 차이점 이 있습니다. 존재하지 않을 isset
때는 불평 $a
하지 않지만, 그렇지 않은 경우 에는 불평 하지 않습니다 array_key_exists
.
사이 array_key_exists
와 isset
모두가 매우 빠르다 불구하고 [O(1)]
, isset
상당히 빠릅니다. 이 검사가 수천 번 발생하면을 사용하고 싶을 것 isset
입니다.
배열 키가 존재하지만 값이있는 경우 - 그들이하지만 동일하지 않은 것을 주목해야한다 null
, isset
반환 false
및 array_key_exists
반환합니다 true
. 값이이면 null
사용해야 array_key_exists
합니다.
여기에 아무런 대답이 없으므로 '경고'문제를 해결하는 것처럼 보이는 이전 질문 에 대한 답변
기본적으로이 경우 배열에 키가 있는지 확인하는 경우 isset
- 표현식 (배열)이 정의되어 있고 키가 설정되어 있는지 알려줍니다.
- var가 정의되지 않은 경우 경고 또는 오류가 아니며 배열이 아닙니다 ...
- 하지만 해당 키의 값이 null이면 false를 반환합니다
과 array_key_exists
- 이름에서 알 수 있듯이 키가 배열에 존재하는지 알려줍니다.
- 하지만 배열 매개 변수가없는 경우 경고를 표시합니다 배열
그렇다면 변수에 어떤 값이 null 일 수있는 키가 있는지 어떻게 확인합니까?
- 배열 일 수도 있고 아닐 수도 있습니다
- (또는 유사하게 dim 2에서 키 검사가 발생하고 dim 1 값이 1 차 dim에 대한 배열이 아닐 수있는 다차원 배열입니다 .)
값이 null 일 때 기존 키를 놓치지 않고 경고없이 (PHP 개발자는 흥미로운 질문 일 것입니다. 그러나 SO와 관련이없는 것은 아닙니다). 물론 우리는 사용하고 싶지 않습니다@
isset($var[$key]); // silent but misses null values
array_key_exists($key, $var); // works but warning if $var not defined/array
보인다 is_array
방정식에 참여해야하지만, 경우에 경고를주는 $var
정의되지 않은 그 해결책이 될 수 있도록, :
if (isset($var[$key]) ||
isset($var) && is_array($var) && array_key_exists($key, $var)) ...
테스트가 주로 null이 아닌 값을 사용하는 경우 더 빠를 수 있습니다. 그렇지 않으면 대부분 null 값을 가진 배열의 경우
if (isset($var) && is_array($var) && array_key_exists($key, $var)) ...
일을 할 것입니다.
배열 작업의 주요 차이점은 것입니다 array_key_exists
반환 true
값이 때 null
, 동안이 isset
반환 false
배열 값으로 설정되어있을 때 null
.
PHP 문서 사이트에서 isset 을 참조하십시오 .
PHP 함수 array_key_exists()
는 배열의 요소에 특정 키 또는 숫자 인덱스가 있는지 확인합니다. 그러나 키 가 존재하고 value 와 연관되어 있는지 판별하려는 경우 PHP 언어 구문 isset()
이이를 알려줍니다 (및 값이 아님 null
). array_key_exists()
키 / 인덱스 값에 대한 정보를 반환 할 수 없습니다.
기능 isset()
이 빠릅니다. http://www.php.net/manual/en/function.array-key-exists.php#82867을 확인 하십시오.
@deceze 답변을 @
연산자 (대수 호기심)로 보완 하고 사용하기에 "더 나은"경우를 나타내는 경우 @
... (로그가없고) 마이크로 성능 최적화가 필요한 경우에는 실제로 더 좋지 않습니다.
array_key_exists
: 키가 배열에 있으면 참입니다.isset
:true
키 / 변수가 존재 하고null
[ array_key_exists보다 빠르지 않은 경우 ]입니다.@$array['key']
:true
키 / 변수가 존재 하고 (null
또는 ''또는 0) 아닌 경우 ; [너무 느려?]
$a = array('k1' => 'HELLO', 'k2' => null, 'k3' => '', 'k4' => 0);
print isset($a['k1'])? "OK $a[k1].": 'NO VALUE.'; // OK
print array_key_exists('k1', $a)? "OK $a[k1].": 'NO VALUE.'; // OK
print @$a['k1']? "OK $a[k1].": 'NO VALUE.'; // OK
// outputs OK HELLO. OK HELLO. OK HELLO.
print isset($a['k2'])? "OK $a[k2].": 'NO VALUE.'; // NO
print array_key_exists('k2', $a)? "OK $a[k2].": 'NO VALUE.'; // OK
print @$a['k2']? "OK $a[k2].": 'NO VALUE.'; // NO
// outputs NO VALUE. OK . NO VALUE.
print isset($a['k3'])? "OK $a[k3].": 'NO VALUE.'; // OK
print array_key_exists('k3', $a)? "OK $a[k3].": 'NO VALUE.'; // OK
print @$a['k3']? "OK $a[k3].": 'NO VALUE.'; // NO
// outputs OK . OK . NO VALUE.
print isset($a['k4'])? "OK $a[k4].": 'NO VALUE.'; // OK
print array_key_exists('k4', $a)? "OK $a[k4].": 'NO VALUE.'; // OK
print @$a['k4']? "OK $a[k4].": 'NO VALUE.'; // NO
// outputs OK 0. OK 0. NO VALUE
추신 :이 텍스트를 변경 / 수정 / 보완 할 수 있으며 위키입니다.
둘은 정확히 동일하지 않습니다. 정확한 차이점을 기억할 수는 없지만 PHP에 배열 키가 있는지 확인하는 것이 더 빠르며 좋은 점은 무엇입니까? .
공통된 합의는 언어 구성이므로 더 빠르기 때문에 가능할 때마다 isset을 사용하는 것 같습니다. 그러나 차이점은 위에서 간략히 설명해야합니다.
참고 URL : https://stackoverflow.com/questions/3210935/whats-the-difference-between-isset-and-array-key-exists
'Programing' 카테고리의 다른 글
Java 8 JDK를 사용하여 Iterable을 스트림으로 변환 (0) | 2020.02.23 |
---|---|
CodeIgniter에 대한 인증 라이브러리를 어떻게 선택해야합니까? (0) | 2020.02.23 |
@Before, @BeforeClass, @BeforeEach 및 @BeforeAll의 차이점 (0) | 2020.02.23 |
div를 나머지 수평 공간으로 채우는 방법은 무엇입니까? (0) | 2020.02.23 |
스택 추적을 잃지 않고 Java에서 예외를 다시 발생 (0) | 2020.02.23 |