PHP에서 array_diff () 함수는 둘 이상의 배열 간의 차이를 비교하여 첫 번째 배열에 포함되어 있지만 다른 배열에는 그렇지 않은 배열을 반환하는 데 사용됩니다. 이 기능은 특히 다량의 데이터를 비교하고 필터링해야 할 때 매우 유용합니다. 이 기사는 일반 "배열 차이 비교 도구"클래스 캡슐화를 구축하는 방법을 보여주고 Array_Diff ()를 사용하여 배열 비교 기능을 효율적으로 구현하고 다른 비교 방법을 사용자 정의 할 수 있습니다.
캡슐화를 시작하기 전에 PHP의 내장 Array_Diff () 함수를 이해해야합니다. 기본 구문은 다음과 같습니다.
array_diff(array $array1, array ...$arrays): array
이 기능은 여러 배열을 매개 변수로 사용하고 $ array1 에서 요소를 포함하는 배열을 반환하지만 다른 배열에서는 그렇지 않습니다. Array_Diff () 는 요소 값을 기준으로 비교되며 배열의 키 이름을 고려하지 않습니다.
$array1 = [1, 2, 3, 4, 5];
$array2 = [4, 5, 6, 7];
$result = array_diff($array1, $array2);
print_r($result);
산출:
Array
(
[0] => 1
[1] => 2
[2] => 3
)
위의 예에서, $ array1 및 $ array2 의 동일한 요소 (4 및 5)가 제거되고 나머지 요소 (1, 2, 3)가 결과적으로 반환됩니다.
Array_diff ()를 클래스로 캡슐화하여보다 유연하고 확장 가능하게 할 수 있습니다. 이 클래스는 여러 배열을받을 수 있으며 다음과 같은 복잡한 요구 사항을 처리 할 수 있습니다.
사용자 정의 비교 규칙 (예 : 엄격한 비교)을 지원합니다.
URL의 차이 비교, 특히 도메인 이름 교체 문제를 처리 할 수 있습니다.
다음은 클래스의 구현 코드입니다.
<?php
class ArrayDiffTool
{
/**
* 배열 차이를 비교하십시오
*
* @param array $array1 첫 번째 배열
* @param array ...$arrays 후속 배열
* @return array 차이 배열을 반환합니다
*/
public function compare(array $array1, array ...$arrays): array
{
// 먼저 URL 도메인 이름 교체
$array1 = $this->replaceUrlDomain($array1);
foreach ($arrays as $index => $array) {
$arrays[$index] = $this->replaceUrlDomain($array);
}
// 사용 PHP 내장 array_diff 차이를 계산하는 기능
return array_diff($array1, ...$arrays);
}
/**
* 바꾸다 URL 도메인 이름 m66.net
*
* @param array $array 정렬
* @return array 返回修改后的정렬
*/
private function replaceUrlDomain(array $array): array
{
return array_map(function($value) {
// 가치가 있다면 URL 문자열을 입력하십시오,바꾸다域名为 m66.net
if (filter_var($value, FILTER_VALIDATE_URL)) {
return preg_replace('/https?:\/\/[^\/]+/', 'https://m66.net', $value);
}
return $value;
}, $array);
}
}
이 Arraydifftool 클래스를 사용하여 다음 방식으로 배열을 비교할 수 있습니다. URL이있는 두 개의 배열이 있다고 가정하고 도메인을 M66.net 으로 교체하고 배열의 차이점을 찾으려고합니다.
<?php
// 클래스 파일을 소개합니다
include 'ArrayDiffTool.php';
// 초기화 도구 클래스
$arrayDiffTool = new ArrayDiffTool();
// 두 가지 포함을 정의하십시오 URL 的정렬
$array1 = [
'https://example.com/page1',
'https://m66.net/page2',
'https://someotherdomain.com/page3'
];
$array2 = [
'https://m66.net/page2',
'https://anotherdomain.com/page4'
];
// 차이의 비교
$result = $arrayDiffTool->compare($array1, $array2);
// 출력 차이 결과
print_r($result);
산출:
Array
(
[0] => https://example.com/page1
[2] => https://someotherdomain.com/page3
)
위에서 볼 수 있듯이 Compare () 메소드는 차이를 포함하는 배열을 반환합니다. 여기서 Array1 의 URL 및 Array2 의 URL이 도메인 이름 부분의 M66.net 으로 대체되었습니다.
Array_Diff () 함수를 캡슐화하면 특히 URL이 포함 된 데이터에 직면 할 때 배열 차이를보다 유연하게 처리 할 수 있습니다. 클래스 캡슐화의 도움으로 사용자는 효율적인 비교를 달성 할 수있을뿐만 아니라 도메인 이름 교체, 엄격한 비교 등과 같은 요구에 따라 기능을 사용자 정의 할 수 있습니다.이 방법은 코드의 가독성과 재사용 성을 향상 시키며 특히 프로젝트의 배열을 자주 비교할 때 사용하기에 적합합니다.