Programing

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

lottogame 2020. 2. 23. 11:31
반응형

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_existsisset모두가 매우 빠르다 불구하고 [O(1)], isset상당히 빠릅니다. 이 검사가 수천 번 발생하면을 사용하고 싶을 것 isset입니다.

배열 키가 존재하지만 값이있는 경우 - 그들이하지만 동일하지 않은 것을 주목해야한다 null, isset반환 falsearray_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



반응형