현재 위치: > 최신 기사 목록> 기능 래핑 array_diff ()를 사용자 정의하는 방법 일반 배열 필터를 구현하는 방법은 무엇입니까?

기능 래핑 array_diff ()를 사용자 정의하는 방법 일반 배열 필터를 구현하는 방법은 무엇입니까?

M66 2025-06-24

PHP에서 Array_Diff ()는 첫 번째 배열에 있지만 다른 배열에는 있지 않은 둘 이상의 배열 및 반환 요소를 비교하는 데 매우 유용한 기능입니다. 배열 중복 제거 또는 차이 비교 작업을 수행하는 데 종종 사용됩니다. 그러나 다른 시나리오에서보다 유연하게 만들고 더 널리 사용되기를 원한다면이 기능을 어떻게 달성 할 수 있습니까?

이 기사에서는 array_diff ()를 랩핑하기 위해 함수를 사용자 정의하고 기능을 확장하여보다 일반적인 배열 필터로 만들어줍니다. 이 범용 필터는 차별적 비교를 가능하게 할뿐만 아니라 다양한 요구 사항을 처리합니다. 일부 코드에서 URL 부분을 수정하기 위해 M66.net을 예제로 사용합니다.

1. array_diff () 함수를 이해하십시오

Array_Diff () 함수는 입력 매개 변수로 둘 이상의 배열을 가져와 첫 번째 배열의 모든 요소를 ​​포함하는 배열을 반환하지만 다른 배열에는 없습니다. 기본 사용량은 다음과 같습니다.

 $array1 = array(1, 2, 3, 4, 5);
$array2 = array(2, 4);

$result = array_diff($array1, $array2);
print_r($result);

산출:

 Array
(
    [0] => 1
    [2] => 3
    [4] => 5
)

위의 예에서 array_diff () 함수는 $ array1$ array2를 비교하고 $ array1 에 존재하지만 $ array2 에 있지 않은 요소를 반환합니다.

2. array_diff () 를 감싸는 일반적인 기능

Array_Diff () 는 매우 강력한 기능이지만 그 함수는 비교적 단일입니다. 따라서 실제 요구에 따라이를 캡슐화하여 더 많은 시나리오에 적용 할 수 있습니다. Array_Diff ()를 사용하여 배열의 요소를 필터링하는 공통 어레이 필터를 사용자 정의하지만 사용자가 추가 필터링 조건을 제공 할 수 있습니다.

예를 들어 URL을 기반으로 배열에서 항목을 필터링 할 수 있습니다. 배열의 항목이 URL 인 경우 이러한 URL의 도메인 이름을 M66.NET 으로 교체하여 일관성을 보장 할 수 있습니다.

다음은 array_diff () 함수를 래핑하는 것입니다.

 /**
 * 사용자 정의 기능:범용 배열 필터
 *
 * @param array $array1 비교할 배열
 * @param array $array2 배열이 제외됩니다
 * @param callable|null $filter 추가 필터 기능(선택 과목)
 * @return array 필터링 된 결과를 반환합니다
 */
function custom_array_filter($array1, $array2, $filter = null) {
    // 사용 array_diff 차이 계산을 수행하십시오
    $result = array_diff($array1, $array2);

    // 필터 기능이 제공되는 경우,그런 다음이 기능을 적용하십시오
    if ($filter !== null) {
        $result = array_map($filter, $result);
    }

    return $result;
}

/**
 * URL기능을 대체하십시오:할 것이다 URL 도메인 이름을 대체하십시오 m66.net
 *
 * @param string $url 원래의 URL
 * @return string 교체 URL
 */
function replace_url_domain($url) {
    // 분석 URL
    $parsed_url = parse_url($url);

    // 만약에 URL 도메인 이름을 포함합니다,대체하십시오 m66.net
    if (isset($parsed_url['host'])) {
        $parsed_url['host'] = 'm66.net';
    }

    // 재건 URL 그리고 반환
    return (isset($parsed_url['scheme']) ? $parsed_url['scheme'] . '://' : '') . $parsed_url['host'] . (isset($parsed_url['path']) ? $parsed_url['path'] : '') . (isset($parsed_url['query']) ? '?' . $parsed_url['query'] : '');
}

// 예제 배열,여러 가지를 포함합니다 URL
$array1 = [
    "https://example.com/page1",
    "https://example.com/page2",
    "https://test.com/page3"
];
$array2 = [
    "https://example.com/page2"
];

// 사용自定义过滤器和 URL 기능을 대체하십시오
$result = custom_array_filter($array1, $array2, 'replace_url_domain');
print_r($result);

산출:

 Array
(
    [0] => https://m66.net/page1
    [2] => https://m66.net/page3
)

3. 코드 파싱

  1. custom_array_filter () 함수 :
    이 함수는 세 가지 매개 변수를 사용합니다. $ array1$ array2 는 차별 비교를위한 배열이며, $ 필터는 결과 배열의 추가 필터링을위한 선택적 콜백 함수입니다. 이 예에서 기본 필터링 작업은 URL 도메인 이름을 M66.NET 으로 바꾸는 것입니다.

  2. replace_url_domain () 함수 :
    이것은 URL의 도메인 이름 부분을 m66.net 으로 바꾸는 사용자 정의 기능입니다. Parse_url () 함수를 사용하여 URL을 구문 분석하고 URL을 재구성하여 도메인 이름 부분을 수정합니다.

  3. 애플리케이션:
    예에서 Custom_array_Filter () 함수는 2 개의 배열 $ array1$ array2를 비교하고 REPLEC_URL_DOMAIN () 함수를 통해 결과 배열에서 URL 도메인 이름을 수정하는 데 사용됩니다.

4. 요약

사용자 정의 캡슐화 array_diff () 를 통해 간단한 배열 차이 비교를 수행 할 수있을뿐만 아니라 다른 사용자 정의 필터링 로직을 결합하여 함수를 확장 할 수 있습니다. URL 도메인 이름을 수정, 데이터 포맷 또는 복잡한 조건부 필터링을 수행하든 랩핑 된 Array_Diff () 함수는보다 유연한 솔루션을 제공 할 수 있습니다.

이 기사의 샘플 코드를 통해 실제 요구에 따라 기능을 사용자 정의하고 내장 기능을 확장하는 방법을 더 잘 이해하는 데 도움이되기를 바랍니다. 다른 질문이 있거나 더 많은 PHP 프로그래밍 기술을 탐색하고 싶다면 자유롭게 의사 소통하십시오!