Как мне использовать рекурсивный итератор массива для обработки многомерного массива?

Я пытаюсь заставить что-то вроде этого работать:

function posts_formatter (&$posts){
    foreach ($posts as $k => $v){

        if (is_array($v)){

            posts_formatter($v);

        }else{

            switch (strtolower($k)){

                # make email addresses lowercase
                case (strpos($k, 'email') !== FALSE):
                    $posts[$k] = strtolower($v);
                    break;

                # make postcodes uppercase
                case (strpos($k, 'postcode') !== FALSE):
                    $posts[$k] = strtoupper($v);
                    break;

                # capitalize certain things
                case (strpos($k, 'line1') !== FALSE):
                case (strpos($k, 'line2') !== FALSE):
                case (strpos($k, 'line3') !== FALSE):
                case (strpos($k, 'forename') !== FALSE):
                case (strpos($k, 'surname') !== FALSE):
                    $posts[$k] = capitalize($v);
                    break;
            }

        }
    }
}

Он будет правильно проходить через массив и форматировать значения, но я не могу заставить его вернуть их. Я поигрался с удалением и из объявления функции и добавлением возврата в конце, но он ничего не сделает.

Кроме того, я думаю, возможно, использовать RecursiveArrayIterator может быть подходящим вариантом. Тем не мение, несмотря на то, что прямо передо мной находится книга с главой об итераторах SPL, ее примеры бесполезны для достижения того, что я пытаюсь сделать. Как мне приступить к его реализации?

Edit:

array (
  'user' => 
  array (
    'title' => 'Mr.',
    'forename' => 'lowercase',
    'surname' => 'name',
    'businessName' => 'some dude',
    'telephone' => '07545464646',
    'postcode' => 'wa1 6nj',
    'line1' => 'blergh road',
    'line2' => 'randomLY cApitaLIzed wOrds',
    'line3' => '',
  ),
  'email' => 'CAPITALIZED@BLERGH.com',
  'address' => 
  array (
    'postcode' => 'ab1 1ba',
    'line1' => 'test road',
    'line2' => 'testville',
    'line3' => 'testshire',
  ),
  'date' => '2010-09-30'
)
8
задан bcmcfc 30 September 2010 в 10:09
поделиться