SELFPHP

SELFPHP-Druckversion
Original Adresse dieser Seite:
http://www.selfphp.de/praxisbuch/praxisbuchseite.php?site=162&group=28
© 2001-2017 E-Mail SELFPHP OHG, info@selfphp.de
© 2005-2017 E-Mail PHP5 Praxisbuch - Matthias Kannengiesser, m.kannengiesser@selfphp.de


Sortierfunktionen


Zu einer effizienten Datenverarbeitung gehören natürlich auch spezielle Funktionen, die es Ihnen ermöglichen, Ihre Daten zu sortieren. Hierfür stellt Ihnen PHP eine mehr als ausreichende Anzahl von Funktionen zur Verfügung.


Einsatz von sort() und rsort()

Diese beiden Funktionen ermöglichen es Ihnen, Ihre indizierten bzw. linearen Arrays auf einfache Art und Weise zu sortieren.

Beispiel – sort()

<?php
$personen = array (
    "Matthias",
    "Caroline",
    "Gülten",
    "Toni"
    );
sort ($personen);
reset ($personen);
// Ausgabe – Schlüssel und Werte
while (list ($key, $val) = each ($personen)) {
  echo "$key $val<br>";
}
?>

Ausgabe
0 Caroline
1 Gülten
2 Matthias
3 Toni

Beispiel – rsort()

<?php
$personen = array (
    "Matthias",
    "Caroline",
    "Gülten",
    "Toni"
    );
rsort ($personen);
reset ($personen);
// Ausgabe – Schlüssel und Werte
while (list ($key, $val) = each ($personen)) {
  echo "$key $val<br>";
}
?>

Ausgabe
0 Toni
1 Matthias
2 Gülten
3 Caroline

Der optionale zweite Parameter sort_flags kann benutzt werden, um das Sortierverhalten mit den folgenden Flags zu beeinflussen.

Flags für Sortiertypen:


Einsatz von asort() und arsort()

Diese beiden Funktionen ermöglichen es Ihnen, Ihre assoziativen Arrays auf einfache Art und Weise zu sortieren.

Beispiel – asort()

<?php
$personen = array (
    "P1"=>"Matthias",
    "P2"=>"Caroline",
    "P3"=>"Gülten",
    "P4"=>"Toni"
    );
asort ($personen);
reset ($personen);
// Ausgabe – Schlüssel und Werte
while (list ($key, $val) = each ($personen)) {
  echo "$key $val<br>";
}
?>
{PSP}Ausgabe
P2 Caroline
P3 Gülten
P1 Matthias
P4 Toni

Beispiel – arsort()
<?php
$personen = array (
    "P1"=>"Matthias",
    "P2"=>"Caroline",
    "P3"=>"Gülten",
    "P4"=>"Toni"
    );
arsort ($personen);
reset ($personen);
// Ausgabe – Schlüssel und Werte
while (list ($key, $val) = each ($personen)) {
    echo "$key $val<br>";
}
?>

Ausgabe
P4 Toni
P1 Matthias
P3 Gülten
P2 Caroline

Der optionale zweite Parameter sort_flags kann benutzt werden, um das Sortierverhalten mit den folgenden Flags zu beeinflussen. Flags für Sortiertypen:


Einsatz von ksort()

Sollten Sie das Array wieder in die ursprüngliche Reihenfolge bringen wollen, wenden Sie ksort() an. Die Funktion sortiert aufsteigend nach den Schlüsseln.

Beispiel

<?php
$personen = array (
    "P1"=>"Matthias",
    "P2"=>"Caroline",
    "P3"=>"Gülten",
    "P4"=>"Toni"
    );
arsort ($personen);
reset ($personen);
// Ausgabe – Schlüssel und Werte
while (list ($key, $val) = each ($personen)) {
  echo "$key $val<br>";
}
ksort ($personen);
reset ($personen);
// Ausgabe – Schlüssel und Werte
while (list ($key, $val) = each ($personen)) {
  echo "$key $val<br>";
}
?>

Ausgabe
P4 Toni
P1 Matthias
P3 Gülten
P2 Caroline

P1 Matthias
P2 Caroline
P3 Gülten
P4 Toni
{PSP}Einsatz von usort(), uasort() und uksort()

Sollten Sie Ihre eigene Vorstellung eines sortierten Arrays haben, können Sie die Funktionen usort(), uasort() und uksort() einsetzen. Gegenüber den bereits beschriebenen Variationen können Sie als zusätzlichen Parameter eine Funktion übergeben, die bestimmte Sortiermerkmale festlegt. Die Funktion muss den Sortiervorgang nach folgendem Schema durch Rückgabe eines bestimmten Code steuern:

Entsprechend interpretiert PHP beim Sortiervorgang dies als Einordnungskriterium.

Beispiel – aufsteigend

<?php
$personen = array (
    "ma"=>"Matthias",
    "ca"=>"Caroline",
    "gü"=>"Gülten",
    "to"=>"Toni",
    "mi"=>"Maria",
    "do"=>"Doro"
    );
function vergleich($a, $b) {
  if ($a == $b) return 0;
  elseif ($a > $b) return 1;
  else return -1;
}
uksort($personen, vergleich);
// Ausgabe
foreach($personen as $key=>$element) {
  echo "$key: $element<br>";
}
?>

Ausgabe
ca: Caroline
do: Doro
gü: Gülten
ma: Matthias
mi: Maria
to: Toni

Beispiel – absteigend

<?php
$personen = array (
    "ma"=>"Matthias",
    "ca"=>"Caroline",
    "gü"=>"Gülten",
    "to"=>"Toni",
    "mi"=>"Maria",
    "do"=>"Doro"
    );
function vergleich($a, $b) {
  if ($a == $b) return 0;
  elseif ($a > $b) return -1;
  else return 1;
}
uksort($personen, vergleich);
// Ausgabe
foreach($personen as $key=>$element) {
  echo "$key: $element<br>";
}
?>

Ausgabe
to: Toni
mi: Maria
ma: Matthias
gü: Gülten
do: Doro
ca: Caroline