In diesen PHP Tutorial gehe ich auf mehrdimensionale Arrays ein. Wenn Sie mit mehrdimensionalen Arrays arbeiten und diese sortieren möchte, wird es meist nicht ganz einfach. Sprechen Sie von einem mehrdimensionalen Array, wenn ein Array in ein Array gespeichert ist. Dadurch haben Sie ein zweidimensionales Array. Speichern Sie in diesen Array ein weiteres Array, sprechen Sie von einem dreidimensionalen Array.
Der Aufbau wird teilweise unübersichtlich und stellt, unerwartete hörten gegenüber den Programmierer dar. Im unteren Abschnitt habe ich für euch eine selbst geschriebene PHP Funktion umgesetzt, welche das Sortieren eines zweidimensionalen Arrays sehr einfach macht.
In der selbst geschriebenen PHP Funktion nutze ich array_multisort() welche das Sortieren ermöglicht. Diese PHP Funktion aber anzusprechen und mitzuteilen, wie die Sortierung erfolgen soll, ist ein wenig knifflig.
Der Syntax:
bool array_multisort(array $arr [, mixed $arg = Konstante zum sortieren]...)
Im ersten Parameter übergeben Sie array_multisort() ein eindimensionales Array, wie die Sortierung erfolgen soll. Im zweiten Parameter geben Sie die Sortierreihenfolge in einer Konstante an und im dritten wird das gesamte mehrdimensionale Array übergeben. Die Funktion array_multisort() gibt true oder false zurück, womit Sie prüfen können, ob die Sortierung erfolgt ist.
Sie können mit array_multisort() entweder mehrere Arrays auf einmal, oder eines multidimensionalen Arrays nach einer oder mehreren Dimensionen benutzt.
Zum Sortieren können Sie der PHP Funktion array_multisort() nachfolgende Sortierarten als Konstante übergeben.
SORT_ASC – Sortierung erfolgt von klein nach groß
SORT_DESC – Sortierung erfolgt von groß nach klein
SORT_REGULAR – vergleicht normale Elemente
SORT_STRING – vergleicht Strings
SORT_NUMERIC – vergleicht Zahlen
Wo kommt das Sortieren zum Einsatz?
In der PHP Programmierung finden Sie häufig ein mehrdimensionales Array, wenn etwa eine Datenbank Abfragen über mehrere Spalten erstellt wurde. Die zurückgegebenen Daten von der Datenbank werden meistens über aufwendige Abfragen in einem Array gespeichert.
Wenn Sie diese tabellarischen Daten anschließend sortieren möchten, sollten Sie nicht immer wieder eine Ressourcen verschwendende Abfrage von der Datenbank machen. Sinnvoller ist das Array, zum Beispiel in ein Textfile zu speichern. Sobald dieses Array wieder benötigt, können Sie einfach das Textfile auslesen. (Anm.: vorausgesetzt die Daten haben sich nicht geändert)
Da beim Auslesen des bestehenden Arrays keine oder nur eine eingeschränkte Sortierfunktion zur Verfügung steht, müssen Sie das Array vor der Ausgabe selbst sortieren. In dem nachfolgenden Beispiel gehe ich davon aus, dass bereits die Daten aus einem Textfile oder Datenbank geladen und in der Variable gespeichert wurden.
Beispiel für ein mehrdimensionales Array
<?php
$array[0]['auto']='Rot';
$array[0]['marke']='Ford';
$array[0]['type']='Fiesta';
$array[0]['baujahr']='1995';
$array[1]['auto']='Blau';
$array[1]['marke']='BMW';
$array[1]['type']='Gran Turismo';
$array[1]['baujahr']='2007';
$array[2]['auto']='Grün';
$array[2]['marke']='Hyundai';
$array[2]['type']='I10';
$array[2]['baujahr']='2009';
$array[3]['auto']='Gelb';
$array[3]['marke']='VW';
$array[3]['type']='Golf';
$array[3]['baujahr']='1999';
echo '<pre>',print_r($array,true),'</pre>';
?>
Ausgabe:
Array
(
[0] => Array
(
[auto] => Rot
[marke] => Ford
[type] => Fiesta
[baujahr] => 1995
)
[1] => Array
(
[auto] => Blau
[marke] => BMW
[type] => Gran Turismo
[baujahr] => 2007
)
[2] => Array
(
[auto] => Grün
[marke] => Hyundai
[type] => I10
[baujahr] => 2009
)
[3] => Array
(
[auto] => Gelb
[marke] => VW
[type] => Golf
[baujahr] => 1999
)
)
In diesem fiktiven Beispiel: Haben wir ein mehrdimensionales Array mit „auto“ (Farbe des Auto), „marke" (Markenname des Hersteller), „type“ (Type/Bezeichnung des Auto) und „baujahr“ (Herstellung sehr des Auto), was in einer tabellarischen Ansicht nicht seltenes darstellt und häufig ausgegeben wird mit print_r(). Kommen wir nun zu der selbst geschriebenen Sortierfunktion.
Beispiel Code:
<?php
function _sort($array = array (), $art, $reinfolge=SORT_DESC) {
if(is_array($array)==true){
foreach ($array as $key => $value) {
if(is_array($value)==true){
foreach ($value as $kk => $vv) {
${$kk}[$key] = strtolower( $value[$kk]);
}
}
}
}
array_multisort(${$art}, $reinfolge, $array);
return $array;
}
?>
Erklärung:
Der PHP Funktion _sort() übergeben Sie im ersten Parameter, das mehrdimensionale Array, im zweiten Parameter den Schlüssel des mehrdimensionalen Arrays. Der Schlüssel wäre z. B.: „baujahr“. Dieser wird als String übergeben.
Beim dritten Parameter übergeben Sie die Konstante für die Sortierung. Der dritte Parameter ist optional und muss nicht übergeben werden. Wenn Sie die Konstante weglassen, erfolgt die Sortierung von groß nach klein.
Die PHP Funktion _sort() prüft mit einer IF-Anweisung als Erstes, ob $array übergeben wurde, mit is_array(), wenn $array ein Array ist, wird mit einer foreach() Schleife das mehrdimensionale Array durchlaufen. Dabei wird in der zweiten Ebene $value mit is_array() geprüft, sollte dies ein Array sein, wird eine zweite foreach() Schleife durchgeführt und ein neues Array für array_multisort() erstellt. Dies wird in einer dynamischen Variable gespeichert. Der Name für die Variabel wird aus dem Schlüssel zusammengesetzt. Der Wert/String wird mit strtolower() vorher in Kleinbuchstaben umgewandelt. Danach wird die PHP Funktion array_multisort() aufgerufen und abschließend gibt die Funktion mit return die Variable $array zurück.
Beispiel der Verwendung:
<?php
$array_auto_new=_sort($array, 'baujahr', SORT_DESC);
echo '<pre>',print_r($array_auto_new,true),'</pre>';
?>
Anmerkung: Damit Sie die selbst geschriebene PHP Funktion _sort() verwenden können, muss dieser dem PHP Interpreter bekannt sein. Sprich, Sie müssen vorher die PHP Funktion deklariert haben. Sollten Sie die PHP Funktion in eine Funktionsdatei ausgelagert haben, müssen Sie diese vorher per Include einlesen.
Die Ausgabe wäre:
Array
(
[0] => Array
(
[auto] => Grün
[marke] => Hyundai
[type] => I10
[baujahr] => 2009
)
[1] => Array
(
[auto] => Blau
[marke] => BMW
[type] => Gran Turismo
[baujahr] => 2007
)
[2] => Array
(
[auto] => Gelb
[marke] => VW
[type] => Golf
[baujahr] => 1999
)
[3] => Array
(
[auto] => Rot
[marke] => Ford
[type] => Fiesta
[baujahr] => 1995
)
)
Wenn wir jetzt die Sortierung nach Markennamen der Autos machen möchten, müssten wir die PHP Funktion _sort() so ansprechen.
<?php
$array_auto_new=_sort($array, 'marke', SORT_ASC);
echo '<pre>',print_r($array_auto_new,true),'</pre>';
?>
Die Sortierung erfolgt dann nach dem Alphabet absteigend.
Beispiel Ausgabe:
Array
(
[0] => Array
(
[auto] => Blau
[marke] => BMW
[type] => Gran Turismo
[baujahr] => 2007
)
[1] => Array
(
[auto] => Rot
[marke] => Ford
[type] => Fiesta
[baujahr] => 1995
)
[2] => Array
(
[auto] => Grün
[marke] => Hyundai
[type] => I10
[baujahr] => 2009
)
[3] => Array
(
[auto] => Gelb
[marke] => VW
[type] => Golf
[baujahr] => 1999
)
)
Wie Sie sehen, ist das Array jetzt nach dem Markennamen sortiert. Ich hoffe, Ihnen hat das Tutorial gefallen. Sollten Sie Anregungen, Probleme oder Fragen haben, stehe ich Ihnen jederzeit in unseren Support Forum zur Verfügung.