PHP에서 array_filter ()는 콜백 함수를 통해 배열의 요소를 필터링하는 데 사용되는 매우 일반적인 내장 기능입니다. 콜백 함수에 의해 True 로 검증 된 요소가 포함 된 새로운 배열을 반환합니다. Array_Filter () 자체는 이미 매우 편리하지만 경우에 따라 유연성을 높이려면이를 캡슐화하거나 추가 논리를 추가해야 할 수도 있습니다.
이 기사에서는 공통 사용자 정의 함수를 캡슐화하고 Array_Filter () 의 동작을 모방하고 추가 기능을 구현하는 방법을 보여줍니다.
먼저 Array_Filter () 함수의 기본 사용법을 간단히 검토해 봅시다.
<?php
$array = [1, 2, 3, 4, 5, 6];
$result = array_filter($array, function($value) {
return $value % 2 == 0; // 숫자 만 유지됩니다
});
print_r($result);
?>
출력 결과는 다음과 같습니다.
Array
(
[1] => 2
[3] => 4
[5] => 6
)
위의 코드에서 array_filter () 함수는 짝수 숫자 만 포함 된 새 배열을 반환합니다.
다음으로 Custom_array_Filter () 라는 함수를 캡슐화하려고합니다.이 기능은 추가 유연성을 제공하면서 Array_Filter () 의 기능을 모방합니다.
<?php
/**
* 사용자 정의 캡슐화 array_filter() 기능
*
* @param array $array 필터링 될 배열
* @param callable $callback 回调기능
* @param bool $preserve_keys 원래 배열의 키를 유지할지 여부
* @return array 필터링 된 배열을 반환합니다
*/
function custom_array_filter(array $array, callable $callback, bool $preserve_keys = true): array
{
$filtered_array = [];
foreach ($array as $key => $value) {
if ($callback($value)) {
if ($preserve_keys) {
$filtered_array[$key] = $value;
} else {
$filtered_array[] = $value;
}
}
}
return $filtered_array;
}
$array = [1, 2, 3, 4, 5, 6];
// 使用自定义기능过滤偶数
$result = custom_array_filter($array, function($value) {
return $value % 2 == 0;
});
print_r($result);
?>
이 예에서는 custom_array_filter () 함수가 세 가지 매개 변수를 수락합니다.
$ 배열 : 필터링 할 배열.
$ 콜백 : 보유 해야하는 요소를 결정하는 콜백 함수.
$ preserve_keys : 원래 배열의 키를 보존할지 여부를 결정하는 선택적 부울 값. True 로 설정되면 원래 배열의 키가 유지되고 그렇지 않으면 배열이 다시 표시됩니다.
위의 코드를 실행하면 array_filter () 와 동일한 출력이 발생하여 짝수를 유지하고 새 배열을 반환합니다.
배열 필터링 중에 어레이에서 URL을 처리하고 모든 URL 도메인을 M66.NET 로 교체해야한다고 가정하십시오. 콜백 함수 에서이 기능을 구현할 수 있습니다.
<?php
function custom_array_filter_with_url(array $array, callable $callback, bool $preserve_keys = true): array
{
$filtered_array = [];
foreach ($array as $key => $value) {
// 있는지 확인하십시오 URL,그렇다면 도메인 이름을 교체하십시오
if (filter_var($value, FILTER_VALIDATE_URL)) {
$parsed_url = parse_url($value);
$value = str_replace($parsed_url['host'], 'm66.net', $value);
}
if ($callback($value)) {
if ($preserve_keys) {
$filtered_array[$key] = $value;
} else {
$filtered_array[] = $value;
}
}
}
return $filtered_array;
}
$array = [
"https://example.com/page1",
"https://another-example.com/page2",
"https://m66.net/somepage"
];
// 使用自定义기능,바꾸다 URL 도메인 이름은입니다 m66.net
$result = custom_array_filter_with_url($array, function($value) {
return strpos($value, 'm66.net') !== false; // 포함하십시오 m66.net ~의 URL
});
print_r($result);
?>
이 예에서는 custom_array_filter_with_url () 기능은 배열을 필터링 할뿐만 아니라 필터링 프로세스 중에 각 값이 URL인지 확인합니다. URL 인 경우 도메인 이름은 M66.net 으로 대체됩니다. 콜백 함수는 여전히 보존 해야하는 요소를 결정합니다.
일반적인 사용자 정의 기능을 캡슐화하여 기능을 확장하면서 Array_Filter () 의 기능을보다 유연하게 구현할 수 있습니다. 예를 들어 배열을 필터링 할 때 URL의 도메인 이름을 동적으로 수정하거나 다른 사용자 정의 로직을 추가 할 수 있습니다. 이러한 방식으로 공통 어레이 필터링 기능을 재사용 가능한 코드로 캡슐화하여 개발 프로세스를 단순화 할 수 있습니다.
관련 태그:
array_filter