PHP로 개발하다 보면 사용자 입력이나 외부 데이터를 받아올 때 문자열 앞뒤에 불필요한 공백(whitespace)이 포함되는 경우가 많습니다. 이런 공백은 데이터 비교나 저장 시 문제를 일으킬 수 있기 때문에 반드시 정리해 주는 것이 좋습니다.
배열에 담긴 모든 문자열을 한 번에 자르려면(trim) array_map() 또는 array_walk() 함수와 trim을 함께 사용하면 됩니다. 아래에서 두 가지 방법을 예제와 함께 살펴보겠습니다.
방법 1. array_map()과 trim() 사용하기
array_map()은 콜백 함수를 배열의 각 요소에 적용한 결과를 새로운 배열로 반환합니다. 원본 배열을 유지하고 싶을 때 유용한 방식입니다.
예제 코드
<?php
$arr = array(" John ", "Jacob ", " Tom ", " Tim ");
echo "앞뒤 공백이 있는 배열...\n";
foreach ($arr as $value) {
echo "값 = $value \n";
}
// trim을 배열의 모든 요소에 적용
$result = array_map('trim', $arr);
echo "\n변경된 배열...\n";
foreach ($result as $value) {
echo "값 = $value \n";
}
?>실행 결과
앞뒤 공백이 있는 배열... 값 = John 값 = Jacob 값 = Tom 값 = Tim 변경된 배열... 값 = John 값 = Jacob 값 = Tom 값 = Tim
방법 2. array_walk()로 원본 배열 직접 수정하기
array_walk()는 배열의 각 요소에 사용자 정의 함수를 적용하며, 참조(&)를 사용하면 원본 배열 자체를 직접 변경할 수 있습니다.
예제 코드
<?php
$arr = array(" Kevin ", "Katie ", " Angelina ", " Jack ");
echo "앞뒤 공백이 있는 배열...\n";
foreach ($arr as $value) {
echo "값 = $value \n";
}
// 각 요소를 참조로 전달하여 trim 적용
array_walk($arr, function(&$val) {
$val = trim($val);
});
echo "\n변경된 배열...\n";
foreach ($arr as $key => $value) {
print($arr[$key] . "\n");
}
?>실행 결과
앞뒤 공백이 있는 배열... 값 = Kevin 값 = Katie 값 = Angelina 값 = Jack 변경된 배열... Kevin Katie Angelina Jack
두 방법의 차이점과 주의 사항
- array_map(): 새 배열을 반환하므로 원본 배열이 그대로 유지됩니다. 코드가 간결하고 가장 널리 사용되는 방식입니다.
- array_walk(): 참조를 통해 원본 배열을 직접 수정합니다. 별도의 결과 변수가 필요 없다는 장점이 있습니다.
- create_function() 관련 주의: 예전 예제에서 흔히 보이던
create_function()은 PHP 7.2부터 지원 중단(deprecated)되었고, PHP 8.0에서 완전히 제거되었습니다. 따라서 위 예제처럼 익명 함수(closure)를 사용하는 것이 안전합니다. - trim()의 기능: 기본적으로 문자열 앞뒤의 공백, 탭, 줄바꿈 등을 제거하며, 두 번째 인자로 제거할 문자를 직접 지정할 수도 있습니다.
마무리
배열 전체의 문자열 공백을 제거할 때는 array_map('trim', $arr) 한 줄이면 충분합니다. 원본 배열을 직접 고쳐야 하는 상황이라면 array_walk()를 활용하세요. 두 방법 모두 실무에서 데이터 정규화(data normalization) 작업에 매우 자주 쓰이는 패턴이니 꼭 익혀두시기 바랍니다.