Sortieren eines Arrays mit Objekten verschiedener Verschachtelung
Hi,
ich habe im Forum nichts finden können, das mein Vorhaben / Problem beschreibt.
Also ich habe einen array der mehrere Objekte behinhaltet.
z.B. folgendes
$arr[1]->gegenstand->techlevel
oder
$arr[1]->gegenstand->werte->gewicht
gegenstand ein ein Objekt
werte ist ein Objekt
techlevel ist eine Variable
$gewicht ist eine Variable
Sortieren kann ich letztendlich also nur nach den Variablen 'techlevel' und 'gewicht', denn nach den Objekte zu sortieren macht kaum Sinn.
Ich habe also folgenden Code gestrickt.
$what bestimmt die Hirarchie, welche verglichen werden soll. Zwecks test wird $what noch in dieser Funktion gesetzt, später sollten diese Werte natürlich übergeben werden.
$arr ist der array mit den Objekten und unterobjekten.
function sort_array($arr)
{
$arraysize = sizeof($arr) ;
$i=0;
$tmp=0;
$change = true;
$what = array("gegenstand", "wert","gewicht");
/*
* $what muss die einzelnen Objekt namen und zuletzt den Variablen Namen enthalten
* $what = array("gegenstand", "techlevel");
*/
while( $i<$arraysize && $change ):
$j=0;
$troca = false;
while( $j < $arraysize-$i-1 ):
switch (sizeof($what)) {
case 1:
$a=$arr[$j]->{$what[0]};
$b=$arr[$j+1]->{$what[0]};
break;
case 2:
$a=$arr[$j]->{$what[0]}->{$what[1]};
$b=$arr[$j+1]->{$what[0]}->{$what[1]};
break;
case 3:
$a=$arr[$j]->{$what[0]}->{$what[1]}->{$what[2]};
$b=$arr[$j+1]->{$what[0]}->{$what[1]}->{$what[2]};
break;
}
if ($a > $b):
$tmp = $arr[$j];
$arr[$j] = $arr[$j+1];
$arr[$j+1] = $tmp;
$troca = true;
endif;
$j++;
endwhile;
$i++;
endwhile;
return $arr;
}
So, das ganze ist ein Bubblesort der ziemlich unübersichtlich geworden ist. Ausserdem kommt er nur mit 1, 2 oder 3 Werten im Array $what klar. Ich würde das ganze viel lieber etwas dynamischer aufbauen. Geht das irgendwie? Ich habs bisher noch nicht geschaft den Operator '->' in einer Variable zu speichern und dann einen Aufruf wie folgt zu realisieren:
$a= $arr[$j]."->".{$what[0]}";
$b= $arr[$j+1]."->".{$what[0]}";
if ($a > $b):
Gruß Sidey
|