Salut.
Wenn ich Dich richtig verstanden habe, möchtest Du eine Datenstruktur mit folgendem Aufbau sortieren:
Delphi-Quellcode:
type
TArrayTable = array { Zeilen } of array { Spalten } of Variant;
Das könnte so funktionieren:
Einerseits brauchst Du eine Funktion, die Dir sagt, wie die Relation zweier Werte ist. Wenn Du nun als Werte zwei konkrete Datensätze oder Zeilen betrachtest, wird dadurch also bestimmt, welcher der beiden Werte vor dem anderen einsortiert werden muss.
Andererseits brauchst Du eine Funktion, die Dir einen solchen Vergleich auf die Elemente der zu sorierenden Liste anwendet. Deine zu sorierende Liste ist Dein Array.
Daraus folgt:
Code:
function Compare($Item1, $Item2)
{
// Vergleich hier, vergleiche Delphi-Hilfe: TList.Sort, TListSortCompare.
}
function MySort($List, $SortCompare)
{
usort($Data,$SortCompare);
return($Data);
}
Das Problem, Listen zu sortieren, nicht neu ist, daher gibt es in PHP bereits reichlich Funktionen zum Sortieren von Listen. Siehe auch: usort, uksort, asort, ... Eine weitere nützliche Funktion ist array_reverse. Für diesen Zweck eignet sich usort.
Es folgt eine
Beispieldatei: Hier wird das
Futhark sortiert.
Code:
<?php
function MySort($Data,$SortCompare)
{
usort($Data,$SortCompare);
return($Data);
}
$Futhark = array(
array('ID'=>1, 'Buchstabe'=>'F', 'Bezeichnung'=>'Fehu'),
array('ID'=>2, 'Buchstabe'=>'U', 'Bezeichnung'=>'Uruz'),
array('ID'=>3, 'Buchstabe'=>'TH', 'Bezeichnung'=>'Thurisaz'),
array('ID'=>4, 'Buchstabe'=>'A', 'Bezeichnung'=>'Ansuz'),
array('ID'=>5, 'Buchstabe'=>'R', 'Bezeichnung'=>'Raidho'),
array('ID'=>6, 'Buchstabe'=>'K', 'Bezeichnung'=>'Kenaz')
// usw.
);
?>
<h3>Das Futhark</h3>
<pre>
<?php print_r($Futhark); ?>
</pre>
<h4>Sortiert nach ID</h4>
<pre>
<?php
function IDCompare($Item1, $Item2)
{
return(strnatcasecmp($Item1['ID'],$Item2['ID']));
}
print_r(MySort($Futhark,'IDCompare'));
?>
</pre>
<h4>Sortiert nach Buchstabe</h4>
<pre>
<?php
function BuchstabenCompare($Item1, $Item2)
{
return(strnatcasecmp($Item1['Buchstabe'],$Item2['Buchstabe']));
}
print_r(MySort($Futhark,'BuchstabenCompare'));
?>
</pre>
<h4>Sortiert nach Bezeichnung</h4>
<pre>
<?php
function BezeichnungCompare($Item1, $Item2)
{
return(strnatcasecmp($Item1['Bezeichnung'],$Item2['Bezeichnung']));
}
print_r(MySort($Futhark,'BezeichnungCompare'));
?>
</pre>
Die
Ausgabe ist:
Code:
[b]Das Futhark[/b]
Array
(
[0] => Array
(
[ID] => 1
[Buchstabe] => F
[Bezeichnung] => Fehu
)
[1] => Array
(
[ID] => 2
[Buchstabe] => U
[Bezeichnung] => Uruz
)
[2] => Array
(
[ID] => 3
[Buchstabe] => TH
[Bezeichnung] => Thurisaz
)
[3] => Array
(
[ID] => 4
[Buchstabe] => A
[Bezeichnung] => Ansuz
)
[4] => Array
(
[ID] => 5
[Buchstabe] => R
[Bezeichnung] => Raidho
)
[5] => Array
(
[ID] => 6
[Buchstabe] => K
[Bezeichnung] => Kenaz
)
)
[b]Sortiert nach ID[/b]
Array
(
[0] => Array
(
[ID] => 1
[Buchstabe] => F
[Bezeichnung] => Fehu
)
[1] => Array
(
[ID] => 2
[Buchstabe] => U
[Bezeichnung] => Uruz
)
[2] => Array
(
[ID] => 3
[Buchstabe] => TH
[Bezeichnung] => Thurisaz
)
[3] => Array
(
[ID] => 4
[Buchstabe] => A
[Bezeichnung] => Ansuz
)
[4] => Array
(
[ID] => 5
[Buchstabe] => R
[Bezeichnung] => Raidho
)
[5] => Array
(
[ID] => 6
[Buchstabe] => K
[Bezeichnung] => Kenaz
)
)
[b]Sortiert nach Buchstabe[/b]
Array
(
[0] => Array
(
[ID] => 4
[Buchstabe] => A
[Bezeichnung] => Ansuz
)
[1] => Array
(
[ID] => 1
[Buchstabe] => F
[Bezeichnung] => Fehu
)
[2] => Array
(
[ID] => 6
[Buchstabe] => K
[Bezeichnung] => Kenaz
)
[3] => Array
(
[ID] => 5
[Buchstabe] => R
[Bezeichnung] => Raidho
)
[4] => Array
(
[ID] => 3
[Buchstabe] => TH
[Bezeichnung] => Thurisaz
)
[5] => Array
(
[ID] => 2
[Buchstabe] => U
[Bezeichnung] => Uruz
)
)
[b]Sortiert nach Bezeichnung[/b]
Array
(
[0] => Array
(
[ID] => 4
[Buchstabe] => A
[Bezeichnung] => Ansuz
)
[1] => Array
(
[ID] => 1
[Buchstabe] => F
[Bezeichnung] => Fehu
)
[2] => Array
(
[ID] => 6
[Buchstabe] => K
[Bezeichnung] => Kenaz
)
[3] => Array
(
[ID] => 5
[Buchstabe] => R
[Bezeichnung] => Raidho
)
[4] => Array
(
[ID] => 3
[Buchstabe] => TH
[Bezeichnung] => Thurisaz
)
[5] => Array
(
[ID] => 2
[Buchstabe] => U
[Bezeichnung] => Uruz
)
)
MfG
Panthrax