현재 위치: > 최신 기사 목록> Array_diff () 및 in_array () 함수를 사용하여 다중 조건 제외를 달성하고 데이터 필터링 프로세스를 최적화하는 방법은 무엇입니까?

Array_diff () 및 in_array () 함수를 사용하여 다중 조건 제외를 달성하고 데이터 필터링 프로세스를 최적화하는 방법은 무엇입니까?

M66 2025-06-06

일일 개발에서 데이터 필터링은 특히 사용자 입력을 처리 할 때 데이터베이스를 처리하거나 외부 API 데이터를 처리 할 때 다음과 같은 데이터를 "제외"해야합니다. 블랙리스트 사용자, 자격이없는 제품 또는 처리 된 데이터 세트에서 처리 된 레코드를 "제외"해야합니다. 현재 두 개의 PHP 네이티브 기능 array_diff ()in_array ()가 편리합니다.

1. array_diff () 의 기본 사용

Array_Diff ()는 배열 값을 비교하는 데 사용되며 첫 번째 배열에서는 값을 반환하지만 다른 배열에서는 그렇지 않습니다. 예를 들어:

 $allUsers = ['alice', 'bob', 'charlie', 'david'];
$blacklist = ['bob', 'david'];

$filteredUsers = array_diff($allUsers, $blacklist);

print_r($filteredUsers);
// 산출: ['alice', 'charlie']

이 예에서 BobDavid는 블랙리스트 멤버이며 Array_Diff ()를 통해 원래 데이터에서 제외합니다.

2. in_array () 의 보조 검증

in_array ()는 값이 배열에 존재하는지 여부를 결정하는 데 사용됩니다. 이 기능은 단일 판단 또는 논리적 조건으로 매우 유용합니다.

예를 들어, 데이터를 통과 할 때 특정 항목을 조건부로 제외 해야하는 경우 다음과 같이 쓸 수 있습니다.

 $exclusions = ['spam', 'banned'];

$itemType = 'spam';

if (!in_array($itemType, $exclusions)) {
    echo "이 항목을 처리 할 수 ​​있습니다";
} else {
    echo "이 항목은 제외되었습니다";
}

3. 조합 사용 : 다중 조건 배제 최적화 전략

이제 더 실용적인 예, Array_diff ()in_array () 를 결합하여 다중 조건 제외를 달성하고 데이터 처리 효율성을 향상시키는 방법을 살펴 보겠습니다.

기사 데이터 세트가 있고 필드에 저자, 상태 및 태그가 포함되어 있다고 가정합니다.

  1. 협박 저자를 제외하십시오

  2. 초안 상태가있는 기사를 제외하십시오

  3. 태그에 "민감한"키워드가있는 기사를 제외하십시오

우리는 이것을 할 수 있습니다 :

 $articles = [
    ['title' => '기사1', 'author' => 'tom', 'status' => 'published', 'tags' => ['php', 'web']],
    ['title' => '기사2', 'author' => 'jack', 'status' => 'draft', 'tags' => ['php', '예민한']],
    ['title' => '기사3', 'author' => 'lucy', 'status' => 'published', 'tags' => ['laravel']],
    ['title' => '기사4', 'author' => 'bob', 'status' => 'published', 'tags' => ['예민한']],
];

$blacklistedAuthors = ['bob', 'jack'];
$excludedStatus = ['draft'];
$sensitiveTags = ['예민한'];

$filtered = array_filter($articles, function ($article) use ($blacklistedAuthors, $excludedStatus, $sensitiveTags) {
    // 블랙리스트 저자 제외
    if (in_array($article['author'], $blacklistedAuthors)) {
        return false;
    }

    // 특정 상태를 제외합니다
    if (in_array($article['status'], $excludedStatus)) {
        return false;
    }

    // 排除含有예민한标签的기사
    foreach ($article['tags'] as $tag) {
        if (in_array($tag, $sensitiveTags)) {
            return false;
        }
    }

    return true;
});

print_r($filtered);

출력은 다음과 같습니다.

 Array
(
    [0] => Array
        (
            [title] => 기사1
            [author] => tom
            [status] => published
            [tags] => Array
                (
                    [0] => php
                    [1] => web
                )
        )

    [2] => Array
        (
            [title] => 기사3
            [author] => lucy
            [status] => published
            [tags] => Array
                (
                    [0] => laravel
                )
        )
)

4. 성능 최적화 제안

  • 데이터 볼륨이 크면 Array_Diff ()를 사용하여 불필요한 컨텐츠를 한 번에 필터링하고 루프 내에서 in_array () 로 자주 호출하지 마십시오.

  • 제외의 배열 구조를 해시 테이블 (즉, 키 값 쌍 양식)으로 조정하면 검색 속도가 더욱 향상 될 수 있습니다.

예를 들어:

 $blacklistedAuthors = array_flip(['bob', 'jack']);

if (isset($blacklistedAuthors[$article['author']])) {
    return false;
}

isset () 의 성능은 일반적으로 in_array () , 특히 높은 동시성 시나리오에서보다 낫습니다.

5. 요약

Array_diff ()in_array ()를 합리적으로 결합하여 여러 조건에서 데이터 제외 로직을 빠르게 구현하여 프로그램의 가독성 및 실행 효율을 향상시킬 수 있습니다. 실제 개발에서 합리적으로 데이터 구조 및 논리적 판단은 코드를보다 효율적이고 안정적으로 만들 것입니다.