Wie kann ich eine rekursive array-iterator zu verarbeiten, die ein mehrdimensionales array?

Ich versuche, so etwas wie diese funktioniert:

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

        }
    }
}

Wird es richtig geh durch das array und das format der Werte, aber ich kann es nicht wieder zu Ihnen zurückkehren. Ich habe gespielt, um mit dem entfernen der & von der Deklaration der Funktion und das hinzufügen von ein return am Ende, aber es wird nicht alles tun.

Außerdem, ich ' m denken, vielleicht mit einem RecursiveArrayIterator könnte der Weg zu gehen. Jedoch, trotz der Anwesenheit von einem Buch direkt vor mir mit einem Kapitel über die SPL Iteratoren seine Beispiele sind nutzlos in Richtung erreichen zu können, was ich versuche. Wie würde ich mich über die Implementierung?

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' => '[email protected]',
  'address' => 
  array (
    'postcode' => 'ab1 1ba',
    'line1' => 'test road',
    'line2' => 'testville',
    'line3' => 'testshire',
  ),
  'date' => '2010-09-30'
)
  • Pflege, um eine var_export Beispiel-array?
  • Naja, das array kann eine beliebige mehrdimensionale (oder basic) - array, das ist der springende Punkt. Die Funktion tun muss, ist Blick für die spezifischen Schlüssel, die möglicherweise oder möglicherweise nicht vorhanden in der array-format und Ihre Werte. Die Frage ist, wie es den Ausgang Sie zurück an das Skript.
  • Ich bitte da um zu schreiben, ein Beispiel, würde ich mag, um die tatsächlichen Daten verwenden stattdessen ein dummy-array. Es ist einfach, um es weniger langweilig zu code, der die Dinge für Sie.
  • Switch/case-Konstrukt nicht funktionieren, wie Sie wohl Absicht, es zu tun. Was Sie haben, ist wie if ( strtolower($k) == (strpos($k, 'email')!==FALSE) ).
  • Fair genug! Ich dachte, dass Sie es brauchte, um das problem besser zu verstehen.
  • Booleans werden sollte true und false, nicht TRUE oder FALSE. Es funktioniert, aber es ist hässlich-code (nicht, dass PHP im Allgemeinen ist ziemlich). Gleiche mit null.
  • Es begann als eine if-Anweisung, aber ich dachte, es wäre ein Durcheinander, wenn ich wollte, dass Sie neue Fälle. Es ist derzeit tun, was ich tun soll.
  • Valamo Ist, dass persönliche Präferenz ist, die Konvention oder etwas anderes?
  • Valamo Aus dem PHP-manual: To specify a boolean literal, use the keywords TRUE or FALSE. Both are case-insensitive.
  • danke, ich peitschte ein kleines array mich in der Zwischenzeit. Bitte lassen Sie mich wissen, wenn das Beispiel ist nicht ausreichend. Ich werde es ändern, verwenden Sie die array dann.

InformationsquelleAutor bcmcfc | 2010-09-30
Schreibe einen Kommentar