bool array_walk_recursive( array &array, callback funcname [, mixed userdata] )
배열의 모든 원소에 미리 정의한 함수를 적용한다. 이 때 배열의 원소가 또 다른 배열을 포함한 경우에는 해당 배열에 대해서도 지정한 함수를 호출한다.

array 배열의 모든 원소에 funcname 함수를 적용하여 배열에 반영한다.
이때 미리 선언되야하는 funcname 함수는 반듯이 값과 키를 인자로 갖는 함수로 만들어야 하며 추가 인자를 지정하면 array_walk 함수에서는 userdata로 넘겨서 반영한다.

funcname 인자로 받은 값이 변경되는 경우는 참조에 의한 호출 방식을 사용해야하는데 이럴경우 &값과 같이 &을 붙여 참조에 의한 호출임을 명시해야만 한다.

array_walk_recursive()는 주로 다차원 배열에 사용하는 array_walk()라고 생각하면 될 듯싶다.
array_walk()로 다차원 배열을 변경할경우 array 배열 원소중에 배열이 있을 경우 funcname의 인자중 값은 Array를 반환해 버린다. 반면 array_walk_recursive()는 하위 배열의 모든 원소를 상위 배열로 끌어올려 하나의 원소처럼 취급하기 때문에 funcname을 들어가는 1차원 원소처럼 적용된다.

예제

<?
// 원소의 인덱스 및 값을 출력한다.
function print_foods($value, $key) {
echo "\$foods[$key]" . " : " . $value . "<br>";
}

$foods = array( 
"cuisine" => "pasta", 
"set" => array("beverage" => "cola", "food" => "pizza"), 
"fruit" => "apple"
);

array_walk($foods, "print_foods");
/*
$foods[cuisine] : pasta
$foods[set] : Array
$foods[fruit] : apple
*/

// 배열 $foods의 모든 배열 원소에 순서대로 print_foods() 함수를 실행한다. 
array_walk_recursive($foods, "print_foods");
/*
$foods[cuisine] : pasta
$foods[beverage] : cola
$foods[food] : pizza
$foods[fruit] : apple
*/
?>