Hallo,
ich möchte ein mehrdimensionales Array sortieren, dass nicht an allen Stellen gleich lang ("stark", "mächtig" o.ä. Begriffe) ist. Die Funktion sort() sortiert mir jede "Mächtigkeit" getrennt.
Der Werdegang:
ich habe eine mysql-Tabelle "list_site" mit 3 Attributen (id, ger, site_id)
(ger für german)
1 deutschland NULL
2 tschechien NULL
3 bayern 1
4 thüringen 1
5 böhmen 2
6 hof 3
7 selb 3
8 hauptstraße 7
also mit mehrstufigen internen Verweisen. diese Tabelle übergeben ich an ein array. Jedes array-Element besteht dann aus eine Kette von Orten (selbst wieder ein array mit ortsrelevanten Attributen)
$feld=array(
array(array(deutschland,attribut)),
array(array(deutschland,attribut),array(bayern,attribut)),
array(array(deutschland,attribut),array(bayern,attribut),array(selb,attribut)),
usw.
);
dann folgt sort($feld) und die Ausgabe sieht so aus:
deutschland
tschechien
deutschland - bayern
deutschland - thüringen
tschechien - böhmen
deutschland - bayern - hof
deutschland - bayern - selb
deutschland - bayern - selb - hauptstraße
d.h. "sort()" priorisiert die Länge der Felder vor dem eigentlichen Sortiervorgang.
Die Ausgabe soll aber so aussehen:
deutschland
deutschland - bayern
deutschland - bayern - hof
deutschland - bayern - selb
deutschland - bayern - selb - hauptstraße
deutschland - thüringen
tschechien
tschechien - böhmen
Weiß jemand, wie das einfach geht? Ich brauche also eine Sortierfunktion, die Feldgrenzen ignoriert. Danke schon mal.
Gruß
Tim
wer sich für den Code interessiert:
ich möchte ein mehrdimensionales Array sortieren, dass nicht an allen Stellen gleich lang ("stark", "mächtig" o.ä. Begriffe) ist. Die Funktion sort() sortiert mir jede "Mächtigkeit" getrennt.
Der Werdegang:
ich habe eine mysql-Tabelle "list_site" mit 3 Attributen (id, ger, site_id)
(ger für german)
1 deutschland NULL
2 tschechien NULL
3 bayern 1
4 thüringen 1
5 böhmen 2
6 hof 3
7 selb 3
8 hauptstraße 7
also mit mehrstufigen internen Verweisen. diese Tabelle übergeben ich an ein array. Jedes array-Element besteht dann aus eine Kette von Orten (selbst wieder ein array mit ortsrelevanten Attributen)
$feld=array(
array(array(deutschland,attribut)),
array(array(deutschland,attribut),array(bayern,attribut)),
array(array(deutschland,attribut),array(bayern,attribut),array(selb,attribut)),
usw.
);
dann folgt sort($feld) und die Ausgabe sieht so aus:
deutschland
tschechien
deutschland - bayern
deutschland - thüringen
tschechien - böhmen
deutschland - bayern - hof
deutschland - bayern - selb
deutschland - bayern - selb - hauptstraße
d.h. "sort()" priorisiert die Länge der Felder vor dem eigentlichen Sortiervorgang.
Die Ausgabe soll aber so aussehen:
deutschland
deutschland - bayern
deutschland - bayern - hof
deutschland - bayern - selb
deutschland - bayern - selb - hauptstraße
deutschland - thüringen
tschechien
tschechien - böhmen
Weiß jemand, wie das einfach geht? Ich brauche also eine Sortierfunktion, die Feldgrenzen ignoriert. Danke schon mal.
Gruß
Tim
wer sich für den Code interessiert:
PHP:
<?
function uebergeordneter_ort($id){
global $connection;
$query = "
SELECT
s.ger,s.site_id
FROM list_site AS s
WHERE s.id = '$id'
";
$result_loop = query_sql($query,$connection);
$feld=mysql_fetch_row($result_loop);
return($feld);
}
$query = "
SELECT
s.ger,s.site_id
FROM list_site AS s
ORDER BY s.ger
";
$result_site = query_sql($query,$connection);
$i = 0;
$k = 0;
$ort = array();
for ($i=0;$site[$i][0]=mysql_fetch_array($result_site);$i++){
$j = 0;
while ($site[$i][$j][1]){
$site[$i][$j+1] = uebergeordneter_ort($site[$i][$j][1]);
$j++;
}
}
for ($i = 0;$i<count($site);$i++) $site[$i] = array_reverse($site[$i]);
sort($site);
?>
<ul><?
for ($i = 0;$i<count($site);$i++){
?>
<li><?
for ($j = 0;$j<count($site[$i]);$j++){
echo $site[$i][$j][1],": ",$site[$i][$j][0]," - ";
}
?>
</li><?
}
?>
</ul>