[PHP] array_map auf Objekte eines Arrays

tleilax

be forever curious
ID: 27936
L
20 April 2006
1.845
184
Moinsen,

ich weiss grad nicht, ob ich den Wald vor lauter Bäumen nicht sehe oder ob es einfach keine Funktion gibt, die mein Problem intuitiv umsetzen kann.

Folgende Situation sei gegeben:

Ich habe ein Array mit Objekten gleichen Typs, die die Methode to_array() besitzen. Ich möchte nun auf jedem Objekt diese Methode aufrufen und ein Array erhalten, das sämtliche Ergebnisse sammelt.

Problem:

  • array_map() fällt raus, da ich keinen Callback angeben kann, der sich explizit auf das momentane Objekt in der Iteration bezieht.
  • Selbiges für array_walk().

Momentane Lösung:

PHP:
$result = array_map(create_function('$a', 'return $a->to_array();'), $array);

Mein Kritikpunkt:

Geht das nicht anders? Irgendwie widerstrebt es mir, eine mehr oder weniger sinnlose Proxyfunktion dafür nutzen zu müssen.

Wer Ideen hat - immer her damit... ;)
 
Zuletzt bearbeitet:
ich kenne mich mit OOP nicht gut aus und bin nicht sicher ob ich's ganz verstanden habe, aber mir faellt foreach ein.
PHP:
$result=array();
foreach ($array as $key => $value)
 $result[]=$array[$key]->to_array();
vllt ist's ja Kaese, aber hey:ugly:

schoenen Abend noch
 
Naja, iterieren ist irgendwie immer eine Lösung, aber mir sind 5 Zeilen momentan dafür einfach zu viel. Ich such einen Einzeiler, der das Ganze macht und bleib wohl bei dem von mir geposteten Codeschnippsel, bis ich entweder was anderes finde oder das Ganze komplett umgehen kann... ;)
 
Wenn dus öfters brauchst kannst du dir ja auch eine eigenen Liste bauen, mit den passenden Funktionen.

Oder andere Programmiersprache? :roll:
 
Wenn dus öfters brauchst kannst du dir ja auch eine eigenen Liste bauen, mit den passenden Funktionen.

Oder andere Programmiersprache? :roll:
Wenn ich's öfter brauchen werde, werde ich mir da wohl ein geeignetes Datenmodell für schreiben - gute Idee. Bis jetzt brauche ich's nur ein einziges Mal, aber es könnte sein, dass ich da noch an ein paar anderen Stellen drauf stosse.

Bin aber vielleicht auch grad nur etwas Prototype-verwöhnt (so à la $array->invoke('to_array');) und muss mich erst dran gewöhnen, für PHP wieder umzudenken... ;)

Andere Programmiersprache fällt raus. Nur wegen dieser einen Stelle gleich die ganze Applikation - nein danke. Da fehlt mir zum einen der Elan zu und zum anderen würden mir meine Kollegen den Hals umdrehen. :LOL:
 
Bin aber vielleicht auch grad nur etwas Prototype-verwöhnt (so à la $array->invoke('to_array');) und muss mich erst dran gewöhnen, für PHP wieder umzudenken... ;)

Genau sowas meinte ich. Mittels SPL kann man das schöne umsetzen... muss aber an der Stelle dann mit einem eigenen Objekt arbeiten, nicht wie in Javascript wo man bestehende Objekte einfach mit prototyp (nicht das Framework) erweitern kann.