현재 위치: > 최신 기사 목록> Array_Diff () 및 Array_Filter ()는 공동으로보다 복잡한 필터링 로직을 구현합니다

Array_Diff () 및 Array_Filter ()는 공동으로보다 복잡한 필터링 로직을 구현합니다

M66 2025-05-14

매일 PHP 개발에서 필터링 어레이는 매우 일반적인 작업입니다. 유효하지 않은 데이터를 정리하거나 특정 요소 제거 또는 비즈니스 로직 필터링을 수행하든 Array_Filter () 또는 Array_Diff () 와 같은 기능을 사용할 수 있습니다. 그것들 만 사용하는 것은 이미 강력하지만, 결합 될 때 더 복잡하고 유연한 배열 작업을 구현할 수 있습니다.

이 기사는 예제를 사용하여 Array_Diff ()Array_Filter ()를 결합하여 복잡한 배열 필터링 로직을 구현하는 방법을 설명합니다.

1. 기본 검토

Array_Filter ()

Array_Filter () 는 일반적으로 콜백 함수를 기반으로 기준을 충족하지 않는 배열의 값을 필터링하는 데 사용됩니다.

 $numbers = [1, 2, 3, 4, 5];
$even = array_filter($numbers, function($n) {
    return $n % 2 === 0;
});
// $even = [1 => 2, 3 => 4]

Array_diff ()

Array_Diff ()는 다른 배열에 있지 않은 배열의 모든 값을 반환하는 데 사용됩니다.

 $all = ['apple', 'banana', 'cherry'];
$remove = ['banana'];
$result = array_diff($all, $remove);
// $result = [0 => 'apple', 2 => 'cherry']

2. 문제 시나리오

배제하려는 일부 값 (예 : 블랙리스트, 기존 항목, 유효하지 않은 데이터 등)이 포함 된 여러 사용자 입력이 포함 된 다양한 데이터가 있다고 가정합니다. 당신은 희망 :

  • Array_Filter ()를 사용하여 유효하지 않거나 잘못 포맷 된 항목을 필터링합니다.

  • 그런 다음 Array_Diff ()를 사용하여 블랙리스트에서 해당 값을 제거하십시오.

  • 마지막으로, 추가 처리에 사용할 수있는 깨끗한 배열.

3. 실제 사례

사용자 제출 URL 배치를 수집한다고 가정 해 봅시다.

  1. 널 값 또는 잘못된 형식을 제거하십시오.

  2. 블랙리스트에서 제외 된 도메인 이름.

 $userUrls = [
    'https://m66.net/article/123',
    'http://example.com/test',
    '',
    'not_a_url',
    'https://m66.net/login',
    'https://blacklist.com/malicious',
];

$blacklistedDomains = ['blacklist.com'];

// 첫 번째 단계:사용 array_filter() 잘못된 클리어런스 URL
$validUrls = array_filter($userUrls, function($url) {
    return filter_var($url, FILTER_VALIDATE_URL);
});

// 2 단계:추출은 합법적입니다 URL 도메인 이름,블랙리스트 도메인 이름을 필터링하십시오
$filteredUrls = array_filter($validUrls, function($url) use ($blacklistedDomains) {
    $host = parse_url($url, PHP_URL_HOST);
    return !in_array($host, $blacklistedDomains);
});

// $filteredUrls 이제 합법적이고 블랙리스트가 포함되어 있지 않습니다 URL
print_r($filteredUrls);

출력 결과는 다음과 같습니다.

 Array
(
    [0] => https://m66.net/article/123
    [1] => http://example.com/test
    [4] => https://m66.net/login
)

실제로 여기에서 Array_Filter ()를 두 번 사용했으며 아래와 같이 도메인 이름 목록 간의 차이점을 처리하기 위해 필요한 경우 Array_Diff () 도 소개 할 수도 있습니다.

4. array_diff ()와 결합하여 블랙리스트를 정확하게 제외합니다

먼저 URL에서 모든 도메인 이름을 추출한 다음 Array_Diff ()를 사용하여 블랙리스트 도메인 이름을 제외 할 수 있습니다.

 $domains = array_map(function($url) {
    return parse_url($url, PHP_URL_HOST);
}, $validUrls);

$allowedDomains = array_diff($domains, $blacklistedDomains);

// 다시 필터 URL,소지품 만 유지합니다 allowedDomains ~의
$finalUrls = array_filter($validUrls, function($url) use ($allowedDomains) {
    $host = parse_url($url, PHP_URL_HOST);
    return in_array($host, $allowedDomains);
});

print_r($finalUrls);

5. 요약

Array_Filter ()Array_Diff ()를 결합하여 다양한 복잡한 배열 필터링 로직을 매우 유연하게 처리 할 수 ​​있습니다. 실제 개발 :

  • Array_Filter ()는 조건에 따라 배열 요소를 하나씩 점검하는 데 더 적합합니다.

  • Array_diff () 는 알려진 유효하지 않은 항목 또는 블랙리스트를 제외하는 데 더 적합합니다.

  • 이 둘을 결합하면 요소 컨텐츠를 확인할뿐만 아니라 설정 필터링도 실현할 수 있습니다.

Flexible Mastering 이러한 기능의 조합은 PHP에서 데이터 배열의 효율성 및 코드 가독성을 크게 향상시킵니다.