Inhalte aus einem Array gezielt herausholen mit CakePHP

Immer wieder gibt es Situationen, wo man gezielt aus einem mehrdimensionalen Array Werte raus holen möchte. Oft baut man sich dafür irgendwelche Schleifen, Hilfs-Funktionen usw., CakePHP bietet hier aber eine sehr hilfreiche Funktion namens Set::extract !

Gehen wir mal davon aus, dass wir folgendes recht einfach aufgebautes mehrdimensionales Array haben:

Array
(
    [0] => Array
        (
            [id] => 1
            [bla] => Hans
        )
    [1] => Array
        (
            [id] => 2
            [bla] => Müller
        )
    [2] => Array
        (
            [id] => 3
            [bla] => Katze
        )
    [3] => Array
        (
            [id] => 4
            [bla] => Maus
        )
)

Wir wollen nun einfach nur an alle Werte des Feldes ‚id‘ kommen. Das lässt sich dann wie folgt bewerkstelligen:

$result = Set::extract('/id', $array);

Resultat:

Array
(
    [0] => 1
    [1] => 2
    [2] => 3
    [3] => 4
)

Voodoo? Nein, ist ganz einfach was hier passiert! Es gibt eine Abfragesprache namens XPath die man unter Umständen schon mal kennengelernt hat, wenn man mit XML-Dateien zu tun hat.

Diese Sprache dienst vereinfacht gesagt dazu, mit flexiblen Ausdrücken sich die Daten raus zu fischen,die man braucht. Für Arrays wurde das ganze nun adaptiert und man kann mit entsprechendem Syntax auch in Arrays suchen. Ein leicht komplexeres Beispiel in dem Zusammenhang könnte dann noch wie folgt aussehen:

Array
(
    [0] => Array
        (
            [A] => Array
                (
                    [0] => Array
                        (
                            [id] => 1
                            [bla] => Hans
                        )
                    [1] => Array
                        (
                            [id] => 2
                            [bla] => Müller
                        )
                )
            [B] => Array
                (
                    [0] => Array
                        (
                            [id] => 3
                            [bla] => Katze
                        )
                    [1] => Array
                        (
                            [id] => 4
                            [bla] => Maus
                        )
                )
        )
)

Möchte man hier nun aus dem Array ‚A‘ alle Werte von ‚id‘ haben, sähe das wie folgt aus:

$result = Set::extract('/A/id', $array);

Resultat:

Array
(
    [0] => 1
    [1] => 2
)

Generell empfiehlt es sich, mal anzuschauen was noch alles an Funktionen mit der Klasse Set zur Verfügung stehen. Sind einige Helferlein mit dabei, bei denen man sich oft schon gefragt hat, warum es dafür nicht eine passende PHP-Funktion gibt.

Das könnte Dich auch interessieren...

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.