source

isset()과 array_key_exists()의 차이점은 무엇입니까?

bestscript 2022. 12. 12. 21:12

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