PHP 개발에서는 종종 배열에서 특정 조건을 충족하는 요소를 필터링해야합니다. Array_Filter () 는이 요구 사항을 처리하는 강력한 도구이며, 더 복잡한 일치 (예 : 패턴 인식, 키워드 필터링 등)를 수행하려는 경우 정기적 인 표현식이 유용 할 수 있습니다.
이 기사에서는보다 유연한 배열 매칭 및 필터링을 달성하기 위해 정기적 인 표현식과 함께 Array_Filter ()를 사용하는 방법을 소개합니다.
Array_Filter () 는 PHP가 제공하는 내장 함수이며 콜백 함수의 리턴 값에 따라 배열에서 요소를 필터링하는 데 사용됩니다. 기본 구문은 다음과 같습니다.
array_filter(array $array, ?callable $callback = null, int $mode = 0): array
$ 배열 : 원래 배열 필터.
$ 콜백 : 배열의 각 값을 테스트하는 데 사용되는 콜백 함수, 예약을 위해 true를 반환하고, 거짓을 반환하여 제거합니다.
$ 모드 : 옵션, 키 값, 키 이름 또는 둘 다로 전달할지 여부를 지정합니다.
$ 콜백이 전달되지 않으면 Array_Filter ()는 배열에서 False 와 동등한 값을 제거합니다 (예 : 0 , false , '' , null 등).
다음은 몇 가지 일반적인 시나리오입니다. 필터링 작업을 완료하기 위해 preg_match () (일반 일치 함수)와 함께 Array_Filter ()를 사용합니다.
URL 목록이 있고 로그인 필드가 포함 된 링크를 찾고 싶다고 가정합니다.
$urls = [
'https://m66.net/login',
'https://m66.net/register',
'https://m66.net/user/profile',
'https://m66.net/logout',
'https://m66.net/help/login-guide'
];
$filtered = array_filter($urls, function($url) {
return preg_match('/login/i', $url);
});
print_r($filtered);
출력 결과 :
Array
(
[0] => https://m66.net/login
[4] => https://m66.net/help/login-guide
)
설명 : /로그인 /i는 사례에 민감하지 않은 "로그인"과 일치하는 것을 의미합니다.
$data = [
'john@example.com',
'https://m66.net/contact',
'not-an-email',
'user@domain.net',
'hello@m66.net'
];
$emails = array_filter($data, function($item) {
return preg_match('/^[\w\.-]+@[\w\.-]+\.\w{2,}$/', $item);
});
print_r($emails);
출력 결과 :
Array
(
[0] => john@example.com
[3] => user@domain.net
[4] => hello@m66.net
)
$items = ['123start', 'alpha', '42beta', 'm66.net', '99bottles'];
$startsWithDigit = array_filter($items, function($str) {
return preg_match('/^\d/', $str);
});
print_r($startsWithDigit);
출력 결과 :
Array
(
[0] => 123start
[2] => 42beta
[4] => 99bottles
)
정규 표현식의 조합을 통해보다 복잡한 일치하는 논리를 구축 할 수도 있습니다. 예를 들어, "로그인"을 모두 포함하는 URL과 .NET 으로 끝나는 URL을 일치시킵니다.
$urls = [
'https://m66.net/login',
'https://m66.net/login-help.net',
'https://m66.net/home',
'https://m66.net/logout',
'https://m66.net/login/info'
];
$matched = array_filter($urls, function($url) {
return preg_match('/login.*\.net$/i', $url);
});
print_r($matched);
정규 표현 효율 문제 : 복잡한 정규 표현식은 큰 배열을 처리 할 때 성능에 영향을 줄 수 있습니다. 중간 결과를 캐시하거나 표현식을 최적화하는 것이 좋습니다.
유니 코드 문자 일치 : /패턴 /u 와 같은 U 수정자를 활성화해야합니다.
다차원 배열 처리 : 다차원 배열의 경우 array_filter ()는 기본적으로 1 차원 만 처리합니다. 더 깊은 필터링이 필요한 경우 재귀 함수를 사용하여 처리 할 수 있습니다.
PHP 개발자는 Array_Filter ()를 preg_match () 와 결합하여 복잡한 배열 필터링 로직을 쉽게 구현할 수 있습니다. 이 방법은 구문에서 간결 할뿐만 아니라 실행 효율이 높습니다. 데이터 정리, 입력 검증 및 URL 필터링과 같은 다양한 시나리오에 적합합니다.
이 기술을 마스터하면 실제 프로젝트에서 데이터 처리 기능이 크게 향상됩니다!