Nasıl çok boyutlu bir dizi işlemek için özyinelemeli bir dizi yineleyici kullanabilirim?

0 Cevap php

Bu çalışma böyle bir şey almaya çalışıyorum:

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;
            }

        }
    }
}

Bu doğru bir dizi geçmesi ve değerlerini biçimlendirmek ama onları geri alamıyorum olacaktır. Ben işlev bildiriminden & kaldırılması ve sonunda bir dönüş ekleyerek etrafında oynadım ama bir şey yapmayacağım.

Ayrıca, belki de gitmek için bir yol olabilir, bir RecursiveArrayIterator kullanarak düşünüyorum. Ancak, SPL Yineleyicilerde bir bölüm ile sağ önümde bir kitabın varlığına rağmen örnekler ben ne çalışıyorum ulaşmak mümkün olma yolunda işe yaramaz. Nasıl bir uygulama hakkında gitmek istiyorsunuz?

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'
)

0 Cevap