Computer >> 컴퓨터 >  >> 프로그래밍 >> PHP

PHP에서 수천 개의 값을 가진 배열에서 특정 값의 존재 여부를 가장 효율적으로 확인하는 방법

PHP 대규모 배열에서 값 존재 여부를 효율적으로 확인하기

PHP에서 흔히 사용하는 in_array() 함수는 배열 전체를 순차적으로 탐색하기 때문에 요소가 수천 개에 달하는 대규모 배열에서는 성능 저하가 발생할 수 있습니다(시간 복잡도 O(n)). 이럴 때 array_flip()을 활용하면 해시 기반의 즉각적인 조회가 가능해져 훨씬 더 효율적인 처리가 가능합니다.

array_flip()을 활용한 빠른 확인 방법

array_flip()은 배열의 키와 값을 서로 뒤바꾸는 함수입니다. 값을 키로 변환한 후에는 인덱스 접근 방식으로 해당 값이 존재하는지 상수 시간(O(1)) 안에 확인할 수 있습니다.

if (array_flip($set)[$value] !== null) {
    echo "something"; // 원하는 작업 수행
}

조회 작업이 반복될 경우에는 매번 배열을 뒤집지 말고, 뒤집힌 배열을 변수에 저장해 재사용하는 것이 좋습니다.

$flipped = array_flip($set);
if (isset($flipped[$value])) {
    // 값이 존재할 때의 처리 로직
}

여러 개의 키(값)를 동시에 확인하는 방법

확인해야 할 값이 여러 개라면 아래와 같이 array_diff_key()를 조합한 사용자 정의 함수를 활용할 수 있습니다.

function array_keys_exists(array $keys, array $arr) {
    return !array_diff_key(array_flip($keys), $arr);
}

이 함수는 찾으려는 키 목록 중 하나라도 배열에 없으면 차집합에 요소가 남아 false를 반환하고, 모든 키가 존재하면 true를 반환합니다.

사용 시 주의 사항

  • array_flip()은 배열의 값이 문자열 또는 정수형이어야 하며, 그 외의 자료형은 무시됩니다.
  • 중복된 값이 있을 경우 마지막 값만 남게 되므로 유니크한 데이터에 적합합니다.
  • 뒤집힌 배열이 추가 메모리를 차지하므로, 단발성 조회보다는 반복적인 조회가 필요한 상황에서 사용하는 것이 가장 효과적입니다.