У вас внутри есть такое условие:
if (is_array($v)) {
array_walk_recursive_array($v, $callback);
Т.е. в колбэк ни при каких условиях массив не попадет, поэтому у вас и не отрабатывает дальнейшие условие по проверке массива, т.к. у вас функция бегает по всей глубине массива. Уберите условие в вашей функции и будет ок:
function array_walk_recursive_array(array &$array, callable $callback) {
foreach ($array as $k => &$v) {
// if (is_array($v)) {
// array_walk_recursive_array($v, $callback);
// } else {
$callback(& $v, $k, $array);
// }
}
}
array_walk_recursive_array( $array, function( $v, $k, $array ) {
if ( is_array( $v ) ) {
$v = $v['a'] = 'b';
return $v;
}
else return $v;
});