Sortiern eines Arrays in PHP ?

martin-s

martin-s

Aktives Mitglied
Thread Starter
Dabei seit
12.05.2005
Beiträge
190
Reaktionspunkte
4
hallo zusammen,

ich überarbeite momentan meine homepage und möchte dort dem besucher eine fotogalerie bieten. nun ergibt sich bei mir folgendes problem :
ich habe mehr als 10 fotos in dieser galerie und habe für jedes foto einen datenbankeintrag angelegt (foto priorität, url, kommentar usw usw). diese priorität bestimmt, in welcher reihenfolge die fotos zu sehen sein sollen. bevor ich die galerie anzeigen lassen will, lese ich alle fotos aus der db in ein array und arbeite das array nachher ab, damit ich die fotos vor dem anzeigen noch sortieren kann (nach priorität).

nun bin ich bei dem "klassischen" fall angelangt, daß folgende reihenfolge entsteht : 1,10,2,3,4 usw. nun las ich von "natsort (array);". hört sich gut an, funktioniert bei mir aber irgendwie nicht... hier der entsprechende code :

PHP:
for ( $x = 0 ; $x <= $number ; $x++ ) //schleife zum einlesen aller fotos in foto_array
				{	
					
				$query = "SELECT * FROM ".$foto_table." WHERE foto_gallery = 0 AND foto_kat_nr = ".$target." ";
				$result = mysql_query($query);
				
				$foto_array[$y]['foto_dateiname'] = mysql_result($result,$x,'foto_dateiname1');
				$foto_array[$y]['foto_comment'] = mysql_result($result,$x,'foto_comment');
				$foto_array[$y]['foto_tank'] = mysql_result($result,$x,'foto_tank');
				$foto_array[$y]['foto_kategorie'] = mysql_result($result,$x,'foto_kategorie');
	
				$y++;  // offset erhöhen

				}

			mysql_close($lh);
	
		$x--;
		
		} // ende datenbank auslesen.

		natsort ( $fotoarray );   <<<--- wie bekomm ich das array sortiert ?

soweit zum quelltext. natürlich wird vorher die db geöffnet usw usw...
stehe irgendwie leicht aufm schlauch und finde die lösung nicht...
vielen dank für eure hilfe und auf die gefahr hin, daß die lösung äusserst simpel sein wird frage ich trotzdem mal ;)

schöne grüsse
martin
 
wie wäre es mit foto_array sortieren lassen, statt fotoarray ;)
 
kleiner formfehler, der aber an der funktion leider nix ändert.
im originalscript hab ichs schon geändert gehabt, brachte aber nix :(
 
schau dir mal die Funktion "usort" an.

Ganz davon abgesehen ist der Teil in dem du die Daten in ein Array speicherst äußerst unschön:
- muss die SELECT Abfrage in jedem Schleifendurchgang ausgeführt werden, man sieht leider nicht ob du $target und $foto_table in der Schleife veränderst.
- du holst dir in jedem Schleifendurchgang ein neues MYSQL-Ergebnis "$result" und wendest trotzdem mysql_result mit der Schleifenvariable an!?

PS: viel schöner ist für so etwas die Konstruktion:
Code:
$res=mysql_query("SELECT feld1, feld2 FROM table ORDER BY feld0815 LIMIT 3,10", $conn);
while($row=mysql_fetch_array($res, MYSQL_ASSOC)) {
     print_r($row);
}

Gunter
 
Wie Gunter_S schon gesagt hat.

Du kanns die Fotos auch schon im SQL nach priorität sortieren

SELECT *
FROM deinerTabelle
ORDER BY priorität_feldname
 
die variante mit dem ORDER BY habe ich wieder herausgenommen, da sie zwar sortiert, aber halt nach dem prinzip 1,10,2,3 usw ... und genau das will ich ja nicht haben !

danke für eure vorschläge !!!
 
Nimm ORDER BY priority ASC dann passiert dir das nicht. dann wird so sortiert: 1,2,3,...,10,11,12
 
sorry balufreak,

aber genau so hatte ich es geschrieben und genau dann sortiert er nach der nicht gewollten art und weise. er soll nach dem "natural order algorithm" sortieren, nicht nach dem "regular computer string sorting algorithm".

mein problem besteht darin, daß ich das array scheinbar etwas unglücklich angelegt habe und nun vor dem problem stehe, das array zu sortieren. den befehl NATSORT gibts dafür ja scheinbar, nur weiss ich den im zusammenhang mit dem array nicht anzuwenden. da fehlt mir ein wenig die erfahrung in sachen PHP.

vielen dank für eure hilfe schonmal !
 
was hast du denn für einen Datentyp für die Priority in der DB definiert. Hört sich so an als ob du "Char" oder "VARCHAR" verwendest. Nimm doch mal ein "INT", "SMALLINT" oder ähnliches, dann sortiert MYSQL auch richtig.

Gunter
 
martin-s schrieb:
mein problem besteht darin, daß ich das array scheinbar etwas unglücklich angelegt habe und nun vor dem problem stehe, das array zu sortieren. den befehl NATSORT gibts dafür ja scheinbar, nur weiss ich den im zusammenhang mit dem array nicht anzuwenden. da fehlt mir ein wenig die erfahrung in sachen PHP.

Warum das nicht funktionieren kann ist ganz einfach.
Natsort verlangt ein "normales" Array:
Code:
$arr[0]="irgendwas";
$arr[1]="was anderes";

Bei dir ist aber jeder Eintrag des Arrays wiederum ein Array...
Woher soll PHP da wissen wie das Array sortiert werden soll?


wie ich schon sagte: schau dir mal "usort" an http://www.php.net/manual/de/function.usort.php

dann kommt man durch etwas nachdenken auf so etwas:
Code:
function cmp($a, $b) {
   if ($a['priority'] == $b['priority']) {
       return 0;
   }
   return ($a['priority'] < $b['priority']) ? -1 : 1;
}

usort ($foto_array, "cmp");

Gunter
 
ok das wars ! hatte foto_disp_prio auf varchar stehen... hmmm... klingt jetzt logisch, warum er das mit dem order nicht ordentlich gemacht hat. verstanden !

vielen vielen dank für eure hilfe. bin noch nicht so formsicher ;) in php...

thx !
 
Zurück
Oben Unten