isset()과 array_key_exists()의 차이점은 무엇입니까?
다음 2개의 함수 호출을 어떻게 비교합니까?
isset($a['key'])
array_key_exists('key', $a)
array_key_exists 키가 배열에 존재하는지 여부를 확실하게 알립니다만,true키/패킷이 존재하지만 존재하지 않는 경우.
$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
또 다른 중요한 차이점이 있습니다.그때도 불평하지 마세요.$a는 존재하지 않지만,는 존재합니다.
사이에array_key_exists그리고.isset둘 다 매우 빠르지만[O(1)],isset훨씬 더 빠릅니다.이 체크가 수천 번 반복된다면isset.
단, 어레이 키가 존재하지만 값이 다음과 같은 경우에는 동일하지 않다는 점에 유의하십시오.null,isset돌아온다false그리고.array_key_exists돌아온다true값이 다음과 같은 경우null, 를 사용해야 합니다.array_key_exists.
코멘트에 기재된 바와 같이, 고객님의 가치는null빠른 선택지는 다음과 같습니다.
isset($foo[$key]) || array_key_exists($key, $foo)
어레이에서 작업할 때 가장 큰 차이점은array_key_exists돌아온다true가치가 있을 때null,하는 동안에isset돌아온다false배열 값이 로 설정되어 있는 경우null.
PHP 설명서 사이트의 isset을 참조하십시오.
오래된 질문에 대한 답변은 여기서 '경고' 문제를 해결하는 것 같지 않으므로 답변합니다(다음 설명 참조).
기본적으로 배열에 키가 존재하는지 여부를 확인하는 경우,isset
- 식(배열)이 정의되어 있고 키가 설정되어 있는지 여부를 나타냅니다.
- 어레이가 아닌 var가 정의되지 않은 경우 경고 또는 오류 없음...
- 그러나 해당 키의 값이 null이면 false를 반환합니다.
그리고.array_key_exists
- 이름에서 알 수 있듯이 배열에 키가 존재하는지 여부를 나타냅니다.
- 그러나 배열 매개 변수가 배열이 아닌 경우 경고를 표시합니다.
그러면 변수에 null일 수 있는 값이 존재하는지를 어떻게 확인할 수 있습니까?
- 배열인지 아닌지는 몰라도
- (또는 마찬가지로 키체크가 dim 2에서 발생하고 dim 1 값이 1 dim(등)의st 배열이 아닌 다차원 배열입니다).
경고도 받지 않고, 값이 null일 때 기존 키를 놓치는 일도 없습니다(PHP devs가 생각하는 것도 흥미로운 질문이지만 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인 어레이의 경우
if (isset($var) && is_array($var) && array_key_exists($key, $var)) ...
할 수 있을 거야.
PHP 함수는 배열 요소에 대해 특정 키 또는 숫자 인덱스가 존재하는지 여부를 확인합니다.단, 키가 존재하며 값과 관련되어 있는지 여부를 판단하고 싶다면 PHP 언어구조에 의해 알 수 있습니다(및 그 값은nullarray_key_exists()는 키/인덱스 값에 대한 정보를 반환할 수 없습니다.
★★isset()http://www.php.net/manual/en/function.array-key-exists.php#82867 를 참조해 주세요.
은 (으로서) @deceze로합니다.@ 가 '좋다', '좋다', '좋다'를 사용하는 경우를 나타냅니다.@ 퍼포먼스 필요한 에는 별로 이 되지 않습니다.마이크로 퍼포먼스 최적화가 필요한 경우(로그가 없는 경우)에는 별로 도움이 되지 않습니다.
array_key_exists. : "true"는 "true"입니다.isset는 : 니다다 。true키/패킷이 존재하고 [array_key_displays]가 아닌 경우@$array['key']는 : 니다다 。true(또는 " 또는 0")이 존재하지null않는 경우 [이렇게 느려?]
$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
추신: 이 텍스트는 변경/수정/보완할 수 있습니다.Wiki 입니다.
그 둘은 완전히 같지 않다.정확한 차이는 기억나지 않지만, PHP에 어레이 키가 존재하는지 확인하는 데 더 빠르고 좋은 방법은 무엇입니까?에 잘 설명되어 있습니다.
언어구성이기 때문에 더 빠르기 때문에 가능하면 아이셋을 사용하는 것이 일반적인 의견의 일치인 것 같습니다.단, 그 차이는 위에서 개략적으로 설명해야 합니다.
언급URL : https://stackoverflow.com/questions/3210935/whats-the-difference-between-isset-and-array-key-exists
'source' 카테고리의 다른 글
| PHP의 "치명적 오류: 최대 함수 중첩 수준 '100'에 도달했습니다, 중단합니다!"에 대한 해결 방법 (0) | 2022.12.12 |
|---|---|
| Python에서 GUID/UUID를 만드는 방법 (0) | 2022.12.12 |
| Java 규칙 엔진의 장단점 (0) | 2022.12.03 |
| pip과 함께 설치된 python 패키지에 대한 종속성 관계 식별 (0) | 2022.12.03 |
| AUTO_INCREMENT 컬럼에 INDEX를 설정하는 것이 도움이 됩니까? (0) | 2022.12.03 |