PHP 배열에서 부분 값 검색하기
PHP에서는 array_filter 함수를 활용하여 배열 내에서 특정 부분 값과 일치하는 요소를 손쉽게 찾을 수 있습니다. 이 함수에 콜백(callback)을 전달하면, 어떤 요소를 배열에 남길지 제거할지를 직접 판단할 수 있습니다.
콜백 함수의 동작 원리
콜백 함수가 false를 반환하면 해당 요소는 배열에서 제거됩니다. 반대로 true를 반환하면 그 요소는 결과 배열에 유지됩니다. 아래 코드 예제를 통해 실제 동작 방식을 확인해 보겠습니다.
$arr = array(0 => 'abc', 1 => 'def', 2 => 'ghijk', 3 => 'lmnxyz');
$results = array();
foreach ($arr as $value) {
if (strpos($value, 'xyz') !== false) { $results[] = $value; }
}
if( empty($results) ) { echo 'No matches found.'; }
else { echo "'xyz' was found in: " . implode('; ', $results); }실행 결과
위 코드를 실행하면 각 배열 요소에 대해 strpos로 'xyz' 문자열이 포함되어 있는지 검사하고, 일치하는 값만 새로운 배열에 담습니다. 최종 출력 결과는 다음과 같습니다.
'xyz' was found in: lmnxyz
핵심 포인트 정리
strpos사용 시 반드시!== false로 비교해야 합니다. 'xyz'가 인덱스 0 위치에서 발견될 경우 0을 반환하기 때문에 느슨한 비교(!=)를 사용하면 오판할 수 있습니다.- 일치하는 결과가 없으면
$results배열이 비어 있으므로empty()로 체크하여 적절한 메시지를 출력합니다. implode를 사용하면 여러 개의 일치 결과를 하나의 문자열로 깔끔하게 합칠 수 있습니다.
이처럼 array_filter와 콜백 함수, 그리고 strpos를 조합하면 PHP 배열 안에서 부분 문자열 일치 검색을 효율적으로 수행할 수 있습니다.