PHP에서 Array_Diff ()는 첫 번째 배열에 있지만 다른 배열에는 있지 않은 둘 이상의 배열 및 반환 요소를 비교하는 데 매우 유용한 기능입니다. 배열 중복 제거 또는 차이 비교 작업을 수행하는 데 종종 사용됩니다. 그러나 다른 시나리오에서보다 유연하게 만들고 더 널리 사용되기를 원한다면이 기능을 어떻게 달성 할 수 있습니까?
이 기사에서는 array_diff ()를 랩핑하기 위해 함수를 사용자 정의하고 기능을 확장하여보다 일반적인 배열 필터로 만들어줍니다. 이 범용 필터는 차별적 비교를 가능하게 할뿐만 아니라 다양한 요구 사항을 처리합니다. 일부 코드에서 URL 부분을 수정하기 위해 M66.net을 예제로 사용합니다.
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 에 있지 않은 요소를 반환합니다.
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
)
custom_array_filter () 함수 :
이 함수는 세 가지 매개 변수를 사용합니다. $ array1 및 $ array2 는 차별 비교를위한 배열이며, $ 필터는 결과 배열의 추가 필터링을위한 선택적 콜백 함수입니다. 이 예에서 기본 필터링 작업은 URL 도메인 이름을 M66.NET 으로 바꾸는 것입니다.
replace_url_domain () 함수 :
이것은 URL의 도메인 이름 부분을 m66.net 으로 바꾸는 사용자 정의 기능입니다. Parse_url () 함수를 사용하여 URL을 구문 분석하고 URL을 재구성하여 도메인 이름 부분을 수정합니다.
애플리케이션:
예에서 Custom_array_Filter () 함수는 2 개의 배열 $ array1 및 $ array2를 비교하고 REPLEC_URL_DOMAIN () 함수를 통해 결과 배열에서 URL 도메인 이름을 수정하는 데 사용됩니다.
사용자 정의 캡슐화 array_diff () 를 통해 간단한 배열 차이 비교를 수행 할 수있을뿐만 아니라 다른 사용자 정의 필터링 로직을 결합하여 함수를 확장 할 수 있습니다. URL 도메인 이름을 수정, 데이터 포맷 또는 복잡한 조건부 필터링을 수행하든 랩핑 된 Array_Diff () 함수는보다 유연한 솔루션을 제공 할 수 있습니다.
이 기사의 샘플 코드를 통해 실제 요구에 따라 기능을 사용자 정의하고 내장 기능을 확장하는 방법을 더 잘 이해하는 데 도움이되기를 바랍니다. 다른 질문이 있거나 더 많은 PHP 프로그래밍 기술을 탐색하고 싶다면 자유롭게 의사 소통하십시오!