original_string: protected function _recursiveTraveler($function, $methodAttributes, $data)
      {
          foreach ($data as $key => $value) {
              if (is_array($value)) {
                  $data[$key] = $this->_recursiveTraveler($function, $methodAttributes, $value);
              } else {
                  $data[$key] = $this->_callUserFunction($function, $key, $value, $methodAttributes);
              }
          }
  
          return $data;
      }
code: protected function _recursiveTraveler($function, $methodAttributes, $data)
      {
          foreach ($data as $key => $value) {
              if (is_array($value)) {
                  $data[$key] = $this->_recursiveTraveler($function, $methodAttributes, $value);
              } else {
                  $data[$key] = $this->_callUserFunction($function, $key, $value, $methodAttributes);
              }
          }
  
          return $data;
      }
code_tokens: protected function _recursiveTraveler ( $ function , $ methodAttributes , $ data ) { foreach ( $ data as $ key => $ value ) { if ( is_array ( $ value ) ) { $ data [ $ key ] = $ this -> _recursiveTraveler ( $ function , $ methodAttributes , $ value ) ; } else { $ data [ $ key ] = $ this -> _callUserFunction ( $ function , $ key , $ value , $ methodAttributes ) ; } } return $ data ; }
docstring: allow to change some data in multi level arrays
  
  @param mixed $methodAttributes
  @param mixed $data
  @param array|string|\Closure $function
  @return mixed
docstring_tokens: allow to change some data in multi level arrays