ich bin grad dabei eine Art Datenbank zu entwickeln, die auf Textdateien basiert. Ich bin grade bei der Funktion, die einen "Datenbankstream" nach bestimmten Merkmalen sortiert.
Nur hab ich jetzt das Problem, dass ich nicht vorher weiß, wie viele Spalten sortiert werden sollen:
function filedb_sort($dbdata, $database, $row, $flag)
{
$row = trim($row);
$flags = explode(',', $flag);
for($a = 1; $a <= $dbdata[0]; $a++)
{
if($dbdata[$a] == $row)
{
$sortrow = ($a - 1);
}
}
$flags[0] = dbname(trim($flags[0]));
$flags[1] = dbname(trim($flags[1]));
$sortarray = array();
$temprows = count($database[0]);
for($a = 0; $a < $temprows; $a++)
{
$sortarray[$a] = array();
}
for($b = 0; $b < count($database); $b++)
{
for($c = 0; $c < count($database[$b]); $c++)
{
array_push($sortarray[$c], $database[$b][$c]);
}
}
if((($flags[0] == 'normal')and($flags[1] == 'asc')) or (($flags[1] == 'normal')and($flags[0] == 'asc')))
{
array_multisort($sortarray[$sortrow], SORT_ASC, SORT_REGULAR, $sortarray);
}
if((($flags[0] == 'normal')and($flags[1] == 'desc')) or (($flags[1] == 'normal')and($flags[0] == 'desc')))
{
array_multisort($sortarray[$sortrow], SORT_DESC, SORT_REGULAR, $sortarray);
}
if((($flags[0] == 'string')and($flags[1] == 'asc')) or (($flags[1] == 'string')and($flags[0] == 'asc')))
{
array_multisort($sortarray[$sortrow], SORT_ASC, SORT_STRING, $sortarray);
}
if((($flags[0] == 'string')and($flags[1] == 'desc')) or (($flags[1] == 'string')and($flags[0] == 'desc')))
{
array_multisort($sortarray[$sortrow], SORT_DESC, SORT_STRING, $sortarray);
}
if((($flags[0] == 'numeric')and($flags[1] == 'asc')) or (($flags[1] == 'numeric')and($flags[0] == 'asc')))
{
array_multisort($sortarray[$sortrow], SORT_ASC, SORT_STRING, $sortarray);
}
if((($flags[0] == 'numeric')and($flags[1] == 'desc')) or (($flags[1] == 'numeric')and($flags[0] == 'desc')))
{
array_multisort($sortarray[$sortrow], SORT_DESC, SORT_STRING, $sortarray);
}
$orgarray = array();
for($a = 0; $a < count($sortarray[0]); $a++)
{
$orgarray[$a] = array();
for($b = 0; $b < count($sortarray); $b++)
{
array_push($orgarray[$a], $sortarray[$b][$a]);
}
}
return $orgarray;
}
$dbdata ist ein Array, das erste Feld ist mit der Anzahl der Spalten beschrieben und die restlichen Spalten sind mit den Namen der Spalten gefüllt. $database ist ein mehrdimensionales Array mit dem Inhalt der "Datenbank", jeweils nach Spalten sortiert, $row ist der Name der Spalte, nach der Sortiert werden soll und $flag ist die Sortiermethode (also z.B. "normal, asc" oder "numeric, desc".
So schaut $database z.B. aus: (die ersten beiden Zeilen sind nur zur Erläuterung, die | zwischen den Zeichen sind auch nur zur Darstellung)
row1|row2|row3|row4|row5
--------------------
1|z|3|5|0
A|2|C|4|1
2|T|4|g|1
a|3|e|Q|1
$database = array(
array(1, A, 2, a),
array(z,2,T,3,8),
array(3,C,4,e),
array(0,1,1,1)
);
Wie kann ich jetzt z.B. nach "row2" sortieren lassen und bei array_multisort() ganz am Ende alle anderen Felder des korrekt angeben, damit die anderen Spalten angepasst werden, wenn ich vorher nicht die Anzahl kenne?
Wenn ich dann "manuell" angebe, z.B. bei "row1" vorne dann $sortarray[0] und dann hinten "$sortarray[1], $sortarray[2], $sortarray[3]", dann funktionierts richtig, aber wie gesagt weiß ich ja vorher nicht, wie viele Spalten es in einer Datenbank gibt.
Ich hoffe ich hab das korrekt erläutert, wenn nicht lade ich mal den ganzen Code hoch mit einer "Beispieldatenbank".
Greez
Schwoebel