현재 위치: > 최신 기사 목록> PHP 루프의 키를 판단하기 위해 array_key_exists를 사용하여 성능에 영향을 미칩니 까? 최적화하는 방법?

PHP 루프의 키를 판단하기 위해 array_key_exists를 사용하여 성능에 영향을 미칩니 까? 최적화하는 방법?

gitbox 2025-09-30

1. array_key_exists 함수에 대한 기본 소개

Array_key_exists ($ 키, $ 배열)는 지정된 $ 키가 $ 배열 에 존재하는지 확인하는 데 사용됩니다. $ 키가 존재하면 true를 반환하십시오. 그렇지 않으면 거짓 .

이 기능의 장점은 값이 무효 인지 거짓인지 여부에 관계없이 배열의 모든 키를 고려하고 올바르게 판단 할 수 있다는 것입니다. 예를 들어:

 <span><span><span class="hljs-variable">$array</span></span><span> = [</span><span><span class="hljs-string">'a'</span></span><span> =&gt; </span><span><span class="hljs-literal">null</span></span><span>, </span><span><span class="hljs-string">'b'</span></span><span> =&gt; </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>

2. 루프에서 array_key_exists 사용과 관련된 성능 문제

루프에서 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> =&gt; </span><span><span class="hljs-number">1</span></span><span>, </span><span><span class="hljs-string">'b'</span></span><span> =&gt; </span><span><span class="hljs-number">2</span></span><span>, </span><span><span class="hljs-string">'c'</span></span><span> =&gt; </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> =&gt; </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가 루프 할 때마다 호출 되며이 특정 시나리오에서는 $ 키가 배열에 있어야 하므로이 점검은 중복됩니다.

3. 최적화하는 방법?

위의 성능 문제에 대한 응답으로, 여러 최적화 솔루션이 아래에 제안됩니다.

(1) 반복 점검을 피하십시오

배열의 키가 존재한다는 것을 이미 알고 있다면 다시 확인할 필요가 없습니다. 예를 들어, array_key_exists를 호출하지 않고 루프에서 $ 키를 사용할 수 있습니다.

 <span><span><span class="hljs-variable">$array</span></span><span> = [</span><span><span class="hljs-string">'a'</span></span><span> =&gt; </span><span><span class="hljs-number">1</span></span><span>, </span><span><span class="hljs-string">'b'</span></span><span> =&gt; </span><span><span class="hljs-number">2</span></span><span>, </span><span><span class="hljs-string">'c'</span></span><span> =&gt; </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> =&gt; </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>
(2) 미리 확인 해야하는 모든 키를 추출하십시오.

루프에서 여러 키가 존재하는지 확인 해야하는 경우 먼저 루프 외부의 배열 키를 얻은 다음 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> =&gt; </span><span><span class="hljs-number">1</span></span><span>, </span><span><span class="hljs-string">'b'</span></span><span> =&gt; </span><span><span class="hljs-number">2</span></span><span>, </span><span><span class="hljs-string">'c'</span></span><span> =&gt; </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>
(3) isset () 또는 array_key_exists ()를 사용한 선택

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> =&gt; </span><span><span class="hljs-literal">null</span></span><span>, </span><span><span class="hljs-string">'b'</span></span><span> =&gt; </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> =&gt; </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>

4. 다른 데이터 구조를 사용하십시오

일부 특수 시나리오에서 배열이 매우 큰 경우 성능 문제는 Array_key_Exists 의 문제 일뿐 만 아니라 데이터 구조 자체의 선택과 관련이있을 수 있습니다. 이 경우 SploBjectStorage 또는 기타 해시 테이블과 같은 다른 데이터 구조를 사용하는 것을 고려할 수 있으며, 이는 성능 측면에서 더 나은 성능을 발휘할 수 있습니다.

5. 요약

Array_key_exists 는 매우 실용적인 기능이지만 루프에서 자주 호출하면 성능에 영향을 줄 수 있습니다. 반복 검사를 피하고 키를 미리 추출하고, 적절한 기능 (예 : ISSET )을 선택하고 적절한 데이터 구조를 사용하여 PHP 코드의 실행 효율을 효과적으로 개선 할 수 있습니다. 실제 개발에서는 많은 양의 데이터를 처리 할 때 프로그램이 효율적으로 유지되도록 특정 응용 프로그램 시나리오를 기반으로 최적의 솔루션을 선택하는 것이 중요합니다.