현재 위치: > 최신 기사 목록> Array_flip () 및 in_array ()를 결합하여보다 효율적인 배열 조회를 달성하는 방법?

Array_flip () 및 in_array ()를 결합하여보다 효율적인 배열 조회를 달성하는 방법?

M66 2025-06-03

매일 PHP 개발에서 배열 검색 작업은 배열에 값이 존재하는지 여부를 결정하거나 큰 배열에서 특정 요소를 자주 검색 해야하는 것과 같은 매우 일반적인 시나리오입니다. in_array () 는 매우 직관적이고 사용하기 쉬운 기능이지만 큰 배열이나 빈번한 검색 시나리오에 직면 할 때 성능이 문제가 될 수 있습니다.

이 기사는 Array_flip ()in_array ()를 결합하여보다 효율적인 배열 검색 방법을 달성하는 방법을 소개합니다.

1. in_array () 의 사용 및 성능 문제

in_array ()는 값이 배열에 존재하는지 여부를 결정하기 위해 PHP에서 사용되는 함수입니다. 구문은 다음과 같습니다.

 in_array($needle, $haystack, $strict = false)

이 함수의 기본 레이어는 선형 검색이므로 배열의 요소를 하나씩 비교합니다. 작은 배열의 경우 문제가 아닙니다. 그러나 수천 개 이상의 배열 요소가 있고 검색 작업이 매우 빈번한 경우 성능이 병목 현상이됩니다.

샘플 코드 :

 $values = range(1, 100000);
if (in_array(99999, $values)) {
    echo "설립하다!";
}

위의 코드가 실행되면 각 검색은 전체 배열을 가로 지르며 최악의 경우 100,000 요소가 모두 횡단됩니다.

2. array_flip () 를 사용하여 조회를 해시 맵으로 변환합니다.

Array_flip () 의 함수는 배열의 키와 값을 교환하는 것입니다. 시간 복잡성은 O (n)이지만 값을 검색하는 복잡성은 O (1)가 될 수 있습니다.

예:

 $values = range(1, 100000);
$flipped = array_flip($values);

if (isset($flipped[99999])) {
    echo "설립하다!";
}

위의 코드에서 Array_flip ()는 값을 키로 변환하고 PHP에서 해시 테이블의 키 검색은 매우 빠르고 거의 일정합니다. 따라서 array_flip () 초기화는 약간의 오버 헤드가 있지만, 성능 향상은 자주 검색 시나리오에서 크게 나타납니다.

3. 결합 된 사용을위한 실제 응용 시나리오

예를 들어,보다 실용적인 시나리오를 시뮬레이션하겠습니다. 예를 들어, 사용자 배치가 제출 한 ID가 시스템의 허용 ID 화이트리스트에 있는지 확인해야합니다.

 $allowed_ids = [101, 205, 309, 402, 588, 999]; // 화이트리스트
$submitted_ids = [205, 402, 777]; // 사용자가 제출되었습니다 ID

// 방법 1:전통적인 방법,사용 in_array
foreach ($submitted_ids as $id) {
    if (!in_array($id, $allowed_ids)) {
        echo "ID {$id} 不在화이트리스트中,운영 거부。" . PHP_EOL;
    }
}

// 방법 2:최적화 방법,사용 array_flip
$allowed_map = array_flip($allowed_ids);
foreach ($submitted_ids as $id) {
    if (!isset($allowed_map[$id])) {
        echo "ID {$id} 不在화이트리스트中,운영 거부。" . PHP_EOL;
    }
}

화이트리스트 허용 _IDS 의 수가 커지면 메소드 2는 메소드 1보다 훨씬 빠릅니다.

4. 주목할만한 것들

  • Array_flip ()은 배열의 값이 고유하므로 중복 값이 ​​덮어 쓰여서 데이터 손실을 초래합니다.

  • 값이 키 유형으로 사용할 수없는 배열 또는 객체 등 인 경우 array_flip ()는 오류를보고하거나 문자열로 자동 변환되므로주의해서 사용하십시오.

  • 값 검색이 빈번하고 배열이 클 때 Array_flip () 만 사용하면 장점을 반영 할 수 있습니다. 한 번만 보면 성능을 낭비합니다.

5. 요약

Array_flip ()in_array ()를 결합하면 빈번한 배열 검색이 필요한 시나리오에서 성능을 크게 향상시킬 수 있습니다. 핵심 아이디어는 "값 조회"를 "키 조회"로 변환하고 PHP 배열 해시 테이블의 빠른 액세스 기능을 활용하는 것입니다.

이 기술을 마스터하는 것은 많은 양의 데이터를 처리하거나 시스템 성능을 최적화 할 때 매우 유용 할 수 있습니다.