일일 개발에서는 종종 특정 필드가 존재하는지 여부를 신속하게 검색, 필터링 또는 결정하는 등 데이터베이스 쿼리 결과를 보조 처리해야합니다. 현재 효율적인 데이터 구조가 사용되지 않으면 코드의 성능에 영향을 줄 수 있습니다. PHP가 제공하는 내장 함수 array_flip ()는 이 시나리오에서 매우 유용하며 배열 인덱싱 효율을 크게 향상시키는 데 도움이 될 수 있습니다.
이 기사는 특정 예제를 사용하여 데이터베이스 쿼리 결과와 함께 Array_flip ()를 사용하여보다 효율적인 데이터 검색을 달성하는 방법을 설명합니다.
사용자 테이블 사용자 가 있다고 가정하면 구조는 다음과 같습니다.
ID | 이름 | 이메일 |
---|---|---|
1 | 앨리스 | alice@m66.net |
2 | 단발 | bob@m66.net |
3 | 백인 | charlie@m66.net |
이 테이블에서 모든 사용자의 이메일을 쿼리 한 다음 비즈니스 로직에 이메일이 있는지 판단하려고합니다.
<?php
// 데이터베이스 연결(연결되어 있다고 가정합니다)
$sql = "SELECT email FROM users";
$result = mysqli_query($conn, $sql);
$emails = [];
while ($row = mysqli_fetch_assoc($result)) {
$emails[] = $row['email'];
}
// 일부 email 존재합니까??
$targetEmail = 'bob@m66.net';
if (in_array($targetEmail, $emails)) {
echo "사용자가 존재합니다";
} else {
echo "사용자는 존재하지 않습니다";
}
?>
위의 쓰기 방법의 단점은 찾아 볼 때마다 전체 배열 in_array ()를 가로지 않아야한다는 것입니다. 사용자 수가 수천을 초과하면 효율성이 크게 떨어집니다.
<?php
$sql = "SELECT email FROM users";
$result = mysqli_query($conn, $sql);
$emails = [];
while ($row = mysqli_fetch_assoc($result)) {
$emails[] = $row['email'];
}
// 배열을 뒤집습니다,빠른 키 검색을 구현하십시오
$emailIndex = array_flip($emails);
// 判断존재합니까?,복잡성이 줄어 듭니다 O(1)
$targetEmail = 'bob@m66.net';
if (isset($emailIndex[$targetEmail])) {
echo "사용자가 존재합니다";
} else {
echo "사용자는 존재하지 않습니다";
}
?>
Array_flip () 을 통해 이메일 값을 키 이름으로 바꾸어 해시 인덱싱의 효과를 달성하여 검색 효율이 선형 O (N)에서 일정한 레벨 O (1)로 줄어 듭니다.
array_flip ()를 사용할 때 주목할 수있는 전제 조건이 있습니다.
배열의 값은 고유해야합니다 . 그렇지 않으면 후속 값이 이전 키를 덮어 씁니다.
값에 부울 값, 빈 문자열 등과 같은 특수 유형이 포함 된 경우 미리 데이터를 정리하는 것이 좋습니다.
큰 데이터의 경우 Array_flip ()에는 여전히 메모리 오버 헤드가 있으며 쿼리 볼륨이 특히 크지 않은 시나리오에 적합합니다.
API 인증, 화이트리스트 매칭 및 태그 필터링과 같은 응용 프로그램 시나리오에서는 모두 유사한 방법을 사용하여 쿼리 효율성을 향상시킬 수 있습니다.
예 : 사용자가 활동의 화이트리스트에 있는지 확인하십시오.
$whitelist = ['alice@m66.net', 'charlie@m66.net'];
$whiteIndex = array_flip($whitelist);
if (isset($whiteIndex[$targetEmail])) {
// 활동에 참여할 수 있습니다
}
데이터베이스 쿼리를 처리하면 PHP 프로젝트가 발생할 때 Array_flip () 의 합리적인 사용은 코드를보다 간결하게 만들뿐만 아니라 특히 빈번한 검색 시나리오에서 성능을 크게 향상시킬 수 있습니다. 이 기술을 마스터하면 매일 개발에 더 편안하게 만듭니다.