본문 바로가기
PHP

[PHP] array_walk()와 array_walk_recursive()의 차이점과 활용법

by teamnova 2025. 9. 28.
728x90

array_walk()는 주어진 배열의 모든 요소에 대해 사용자가 정의한 콜백 함수를 실행하는 함수입니다.

콜백 함수의 첫 번째 파라미터 $value 앞에 &를 붙여 참조로 받았기 때문에, 함수 내에서 $value를 변경한 것이 원본 배열 $fruits에 직접 반영되었습니다.

 

 

array_walk()는 한계가 있습니다.

바로 1차원 배열에서만 동작한다는 점입니다.

만약 배열 안에 또 다른 배열(중첩 배열)이 있다면, 그 안까지는 들어가지 못합니다.

 

username의 공백은 제거되었지만, details 배열 안의 email에 있는 공백은 그대로 남아있습니다. array_walk()는 details가 배열이라는 것만 알고 그 안까지는 탐색하지 않기 때문입니다.

 

array_walk_recursive()는 배열을 재귀적으로 순회하면서 배열이 아닌 값(leaf node)을 만날 때마다 콜백 함수를 실행합니다

 

array_map과의 차이는?
array_walk(): 원본 배열을 직접 수정. 반환값은 bool. 키($key)를 사용할 수 있음.
array_map(): 새로운 배열을 생성하여 반환. 원본은 그대로. 키($key)를 사용할 수 없음.

 

단순한 1차원 배열의 값을 원본에서 직접 변경하고 싶다면 array_walk()를
$_POST나 API 응답처럼 구조가 복잡한 다차원 배열의 모든 최종 값에 대해 일괄적인 처리가 필요하다면

array_walk_recursive()의 사용을 고려해볼수있습니다.