Mehrdimensionales Array sortieren

Navigation
 Startseite
 Fachbücher
 Forum
 Webmaster News
 Script Newsletter
 Kontakt
 Script Installation
 Php
 Php Tutorials
 Impressum

Community-Bereich
 kostenlos Registrieren
 Anmelden
 Benutzerliste

Script Datenbank
 Script Archiv
 Script Top 20
 Screenshots
 Testberichte

Suche
 
Script Seite

Unsere Php Scripts
 Counter Script
 Umfrage Script
 Bilder Upload Script
 Terminverwaltung
 Simple PHP Forum
 RSS Grabber

Script Mods
 phpBB Adsense Mode

Tools und Generatoren
 .htpasswd Generator
 md5 Generator
 base64 Generator
 ICQ Generator
 Colorpicker
 Unix timestamp Tool
 TLD Liste
 Webkatalog Verzeichnis

Partner
Sprüche Treff

Artfiles.de
Bietet Serviceorientierte Internetdienstleistungen...
http://www.Artfiles.de
Hosterplus.de
Bekommen Sie Speicherplatz (Webspace), Domains und...
http://www.Hosterplus.de
 
 
 

Ein mehrdimensionales Array sortieren

Sie befinden sich: Home > Php Tutorial > Ein mehrdimensionales Array...

Ein mehrdimensionales Array sortieren



Eintrag am:  09.03.2014
Hits / Besucher:  6064
Sprache: Deutsch
Kategorie:  Einsteiger Tutorials...
Tutorial Art:  eigenes
Eingetragen von   � 
 

Beschreibung


In diesen PHP Tutorial gehe ich auf mehrdimensionale Arrays ein. Wenn man mit mehrdimensionalen Arrays arbeitet und diese sortieren möchte, wird es meist nicht ganz einfach. Man spricht von einem mehrdimensionalen Array, wenn ein Array in ein Array gespeichert ist. Dadurch hat man ein zweidimensionales Array. Speichert man in diesen Array ein weiteres Array, spricht man 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 Array sehr einfach macht.

In der selbstgeschriebenen 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 übergibt man array_multisort() ein eindimensionales Arrays wie die Sortierung erfolgen soll. Im zweiten Parameter gibt man die Sortierreihenfolge in einer Konstante an und im dritten wird das gesamte mehrdimensionalen Array übergeben. Die Funktion array_multisort() gibt true oder false zurück womit man prüfen kann, ob die Sortierung erfolgt ist.

Man kann mit array_multisort() entweder mehrere Arrays auf einmal, oder eines multidimensionalen Arrays nach einer oder mehreren Dimensionen benutzt.

Zum sortieren kann man 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 findet man häufig ein mehrdimensionales Array, wenn zum Beispiel eine Datenbank abfragen über mehrere Spalten erstellt wurde. Die zurückgegebenen Daten von der Datenbank werden meistens über aufwändige abfragen in einen Array gespeichert.

Wenn man diese tabellarischen Daten anschließend sortieren möchte, sollte man nicht immer wieder eine ressourcenverschwindende Abfrage von der Datenbank machen. Sinnvoller ist es das Array zum Beispiel in ein Textfile zu speichern. Wenn man dieses Array wieder benötigt kann man einfach das Textfile auslesen. (Anm.: vorausgesetzt die Daten haben sich nicht geändert)

Da beim auslesen des bestehenden Array keine oder nur eine eingeschränkte Sortierfunktion zur Verfügung steht, muss man das Array vor der Ausgabe selber sortieren. In den nachfolgenden Beispiel gehe ich davon aus, dass bereits die Daten aus einem Textfile oder Datenbank geladen wurden und bereits 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>';
?>

Die Ausgabe währe:

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. Kommen wir nun zu der selbstgeschriebenen 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() übergibt man im ersten Parameter das mehrdimensionale Array, im zweiten Parameter den Schlüssel des mehrdimensionale Array. Der Schlüssel währe z.b.: "baujahr". Dieser wird als String übergeben.

Beim dritten Parameter übergibt man die Konstante für die Sortierung. Der dritte Parameter ist optional und muss nicht übergeben werden. Wenn man die Konstante weg lässt, 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 man die selbst geschriebene PHP Funktion _sort() verwenden kann, muss dieser den PHP Interpreter bekannt sein. Sprich man muss vorher die PHP Function deklariert haben. Sollten Sie die PHP Funktion in eine Funktionsdatei ausgelagert haben, müssen Sie diese vorher per Include einlesen.

Die Ausgabe währe:

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 Function _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 man sieht, ist das Array jetzt nach dem Markenname 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.

 

 

Tags


 

Verlink uns, wenn Dir das Tutorial gefallen hat:
Artikel hinzufügen bei: