Array_key_exists ($ 키, $ 배열)는 지정된 $ 키가 $ 배열 에 존재하는지 확인하는 데 사용됩니다. $ 키가 존재하면 true를 반환하십시오. 그렇지 않으면 거짓 .
이 기능의 장점은 값이 무효 인지 거짓인지 여부에 관계없이 배열의 모든 키를 고려하고 올바르게 판단 할 수 있다는 것입니다. 예를 들어:
<span><span><span class="hljs-variable">$array</span></span><span> = [</span><span><span class="hljs-string">'a'</span></span><span> => </span><span><span class="hljs-literal">null</span></span><span>, </span><span><span class="hljs-string">'b'</span></span><span> => </span><span><span class="hljs-number">0</span></span><span>];
</span><span><span class="hljs-title function_ invoke__">var_dump</span></span><span>(</span><span><span class="hljs-title function_ invoke__">array_key_exists</span></span><span>(</span><span><span class="hljs-string">'a'</span></span><span>, </span><span><span class="hljs-variable">$array</span></span><span>)); </span><span><span class="hljs-comment">// true</span></span><span>
</span><span><span class="hljs-title function_ invoke__">var_dump</span></span><span>(</span><span><span class="hljs-title function_ invoke__">array_key_exists</span></span><span>(</span><span><span class="hljs-string">'b'</span></span><span>, </span><span><span class="hljs-variable">$array</span></span><span>)); </span><span><span class="hljs-comment">// true</span></span><span>
</span><span><span class="hljs-title function_ invoke__">var_dump</span></span><span>(</span><span><span class="hljs-title function_ invoke__">array_key_exists</span></span><span>(</span><span><span class="hljs-string">'c'</span></span><span>, </span><span><span class="hljs-variable">$array</span></span><span>)); </span><span><span class="hljs-comment">// false</span></span><span>
</span></span>루프에서 array_key_exists를 자주 호출하면 특히 큰 배열을 다룰 때 성능에 부정적인 영향을 줄 수 있습니다. 이유는 다음과 같습니다.
검색 작업의 시간 복잡성 : Array_Key_Exists 에 대한 검색 작업의 시간 복잡성은 O (1)이므로 각 조회에서의 효율이 일정한 레벨임을 의미합니다. 그러나 루프로 여러 번 전화를 걸면이 일정한 시간이 특히 루프 수가 매우 큰 경우 축적 될 수 있습니다.
동일한 키를 반복하십시오 . 루프에서 동일한 배열에서 여러 키 존재 점검을 수행하면 PHP는 이러한 검사를 반복적으로 수행하여 불필요한 컴퓨팅 리소스를 낭비합니다.
예를 들어:
<span><span><span class="hljs-variable">$array</span></span><span> = [</span><span><span class="hljs-string">'a'</span></span><span> => </span><span><span class="hljs-number">1</span></span><span>, </span><span><span class="hljs-string">'b'</span></span><span> => </span><span><span class="hljs-number">2</span></span><span>, </span><span><span class="hljs-string">'c'</span></span><span> => </span><span><span class="hljs-number">3</span></span><span>];
</span><span><span class="hljs-keyword">foreach</span></span><span> (</span><span><span class="hljs-variable">$array</span></span><span> </span><span><span class="hljs-keyword">as</span></span><span> </span><span><span class="hljs-variable">$key</span></span><span> => </span><span><span class="hljs-variable">$value</span></span><span>) {
</span><span><span class="hljs-keyword">if</span></span><span> (</span><span><span class="hljs-title function_ invoke__">array_key_exists</span></span><span>(</span><span><span class="hljs-variable">$key</span></span><span>, </span><span><span class="hljs-variable">$array</span></span><span>)) {
</span><span><span class="hljs-comment">// 특정 행동을 수행하십시오</span></span><span>
}
}
</span></span>위의 코드에서는 array_key_exists가 루프 할 때마다 호출 되며이 특정 시나리오에서는 $ 키가 배열에 있어야 하므로이 점검은 중복됩니다.
위의 성능 문제에 대한 응답으로, 여러 최적화 솔루션이 아래에 제안됩니다.
배열의 키가 존재한다는 것을 이미 알고 있다면 다시 확인할 필요가 없습니다. 예를 들어, array_key_exists를 호출하지 않고 루프에서 $ 키를 사용할 수 있습니다.
<span><span><span class="hljs-variable">$array</span></span><span> = [</span><span><span class="hljs-string">'a'</span></span><span> => </span><span><span class="hljs-number">1</span></span><span>, </span><span><span class="hljs-string">'b'</span></span><span> => </span><span><span class="hljs-number">2</span></span><span>, </span><span><span class="hljs-string">'c'</span></span><span> => </span><span><span class="hljs-number">3</span></span><span>];
</span><span><span class="hljs-keyword">foreach</span></span><span> (</span><span><span class="hljs-variable">$array</span></span><span> </span><span><span class="hljs-keyword">as</span></span><span> </span><span><span class="hljs-variable">$key</span></span><span> => </span><span><span class="hljs-variable">$value</span></span><span>) {
</span><span><span class="hljs-comment">// 직접 사용하십시오 $key,전화를 피하십시오 array_key_exists</span></span><span>
</span><span><span class="hljs-comment">// 특정 행동을 수행하십시오</span></span><span>
}
</span></span>루프에서 여러 키가 존재하는지 확인 해야하는 경우 먼저 루프 외부의 배열 키를 얻은 다음 in_array 또는 기타 방법을 통해 한 번에 확인할 수 있습니다. array_key_exists 에 대한 여러 호출을 피합니다.
<span><span><span class="hljs-variable">$array</span></span><span> = [</span><span><span class="hljs-string">'a'</span></span><span> => </span><span><span class="hljs-number">1</span></span><span>, </span><span><span class="hljs-string">'b'</span></span><span> => </span><span><span class="hljs-number">2</span></span><span>, </span><span><span class="hljs-string">'c'</span></span><span> => </span><span><span class="hljs-number">3</span></span><span>];
</span><span><span class="hljs-variable">$keys</span></span><span> = </span><span><span class="hljs-title function_ invoke__">array_keys</span></span><span>(</span><span><span class="hljs-variable">$array</span></span><span>); </span><span><span class="hljs-comment">// 모든 키를 얻으십시오</span></span><span>
</span><span><span class="hljs-keyword">foreach</span></span><span> (</span><span><span class="hljs-variable">$keys</span></span><span> </span><span><span class="hljs-keyword">as</span></span><span> </span><span><span class="hljs-variable">$key</span></span><span>) {
</span><span><span class="hljs-comment">// 직접 작동 할 수 있습니다 $array[$key]</span></span><span>
}
</span></span>ISSET () 는 일반적으로 사용되는 기능으로, 배열의 값이 널 또는 정의되지 않은지 확인하는 데 일반적으로 사용되는 기능입니다. 키가 존재하는지 여부와 값이 NULL이 아닌 경우에만 관심이있는 경우 ISSET ()를 사용하면 Array_Key_Exists 보다 효율적입니다. isset ()는 배열 값이 설정되어 있는지 직접 확인하고 array_key_exists는 키가 있는지 확인하고 심지어 NULL 값을 고려합니다.
<span><span><span class="hljs-variable">$array</span></span><span> = [</span><span><span class="hljs-string">'a'</span></span><span> => </span><span><span class="hljs-literal">null</span></span><span>, </span><span><span class="hljs-string">'b'</span></span><span> => </span><span><span class="hljs-number">2</span></span><span>];
</span><span><span class="hljs-keyword">foreach</span></span><span> (</span><span><span class="hljs-variable">$array</span></span><span> </span><span><span class="hljs-keyword">as</span></span><span> </span><span><span class="hljs-variable">$key</span></span><span> => </span><span><span class="hljs-variable">$value</span></span><span>) {
</span><span><span class="hljs-keyword">if</span></span><span> (</span><span><span class="hljs-keyword">isset</span></span><span>(</span><span><span class="hljs-variable">$array</span></span><span>[</span><span><span class="hljs-variable">$key</span></span><span>])) {
</span><span><span class="hljs-comment">// 특정 행동을 수행하십시오</span></span><span>
}
}
</span></span>일부 특수 시나리오에서 배열이 매우 큰 경우 성능 문제는 Array_key_Exists 의 문제 일뿐 만 아니라 데이터 구조 자체의 선택과 관련이있을 수 있습니다. 이 경우 SploBjectStorage 또는 기타 해시 테이블과 같은 다른 데이터 구조를 사용하는 것을 고려할 수 있으며, 이는 성능 측면에서 더 나은 성능을 발휘할 수 있습니다.
Array_key_exists 는 매우 실용적인 기능이지만 루프에서 자주 호출하면 성능에 영향을 줄 수 있습니다. 반복 검사를 피하고 키를 미리 추출하고, 적절한 기능 (예 : ISSET )을 선택하고 적절한 데이터 구조를 사용하여 PHP 코드의 실행 효율을 효과적으로 개선 할 수 있습니다. 실제 개발에서는 많은 양의 데이터를 처리 할 때 프로그램이 효율적으로 유지되도록 특정 응용 프로그램 시나리오를 기반으로 최적의 솔루션을 선택하는 것이 중요합니다.