Spalten aus mehrdimensionalen Arrays in PHP extrahieren

Hin und wieder muß man aus einem mehrdimensionalen Array eine Spalte extrahieren. Dies ist kein großer Akt. Da man sich aber nicht ständig wiederholen möchte und soll (DRY), lohnt es sich, für diese Aufgabe eine Funktion zu schreiben.

function array_row($array, $row)
{
    $ret = array();

    foreach ($array as $record) {
        $ret[] = $record[$row];
    }

    return $ret;
}
 

Als Parameter $array übergeben wir das mehrdimensionale Array, aus dem wir eine Spalte extrahieren wollen. Der Parameter $key bezeichnet die zu extrahierende Spalte.

Zur Demonstration der Funktion nehmen wir folgende Datenbasis.

$data = array(
    array("id" => 11, "nachname" => "Müller",   "vorname" => "Annegret"),
    array("id" => 13, "nachname" => "Schmidt",  "vorname" => "Lisbeth"),
    array("id" => 17, "nachname" => "Meier",    "vorname" => "Günther"),
    array("id" => 19, "nachname" => "Werner",   "vorname" => "Gabi"),
    array("id" => 23, "nachname" => "Hofmann",  "vorname" => "Ramona"),
    array("id" => 29, "nachname" => "Kaufmann", "vorname" => "Maria"),
);
 

Nun extrahieren wir beispielsweise alle Nachnamen aus diesem mehrdimensionalen Array.

$nachnamen = array_row($data, "nachname");
 

Das Ergebnis sieht wie folgt aus.

array
  0 => string 'Müller' (length=6)
  1 => string 'Schmidt' (length=7)
  2 => string 'Meier' (length=5)
  3 => string 'Werner' (length=6)
  4 => string 'Hofmann' (length=7)
  5 => string 'Kaufmann' (length=8)
 

Manchmal möchte man eine Spalte assoziativ extrahieren. Einerseits kann es sein, daß man die Assoziationen des Ausgangsarrays erhalten möchte, andererseits kann es sein, daß man eine Spalte des Arrays als Schlüssel definieren möchte. Auch das ist nicht kompliziert, aber es lohnt sich auch hier, dafür eine eigene Funktion zu schreiben.

function array_arow($array, $row, $keyrow = null)
{
    $ret = array();

    if ($keyrow === null) {
        foreach ($array as $key => $record) {
            $ret[$key] = $record[$row];
        }
    } else {
        foreach ($array as $record) {
            $ret[$record[$keyrow]] = $record[$row];
        }
    }

    return $ret;
}
 

Der Parameter $array bezeichnet auch hier wieder das mehrdimensionale Array, aus dem extrahiert werden soll. Ebenso bezeichnet auch der Parameter $row wieder die zu extrahierende Spalte. Läßt man den Parameter $keyrow weg, erhält man die gewünschte Spalte und es werden die Assoziationen des Ausgangsarrays gewahrt. Wird der Parameter $keyrow gesetzt, wird diese Spalte als Schlüsselwert genutzt.

Im folgenden Beispiel wollen wir wieder die Spalte nachname extrahieren, als Schlüssel soll die Spalte id genutzt werden.

$nachnamen = array_arow($data, 'nachname', 'id');
 

Das Ergebnisarray sieht wie folgt aus.

array
  11 => string 'Müller' (length=6)
  13 => string 'Schmidt' (length=7)
  17 => string 'Meier' (length=5)
  19 => string 'Werner' (length=6)
  23 => string 'Hofmann' (length=7)
  29 => string 'Kaufmann' (length=8)
 

Schreibe einen Kommentar

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