sort() ???
Michi
- php
Hallo Forumianer,
Einige Bilder befinden sich durchnummeriert (von 0 bis x) m unterverzeichnis /bilder/.
Folgende for-schleife lädt die BIlder in den Array $bilder
$bilder[X][0] ist die höhe
$bilder[X][1] ist die breite
$bilder[X][1] ist die bild Url
----------
for($j=0;$j<100;$j++) {
if(file_exists("bilder/$j . ".jpg")) {
$bilder[$j][2] = "bilder/$j . ".jpg";
$sizes = getimagesize($j . ".jpg");
$bilder[$j][1] = $sizes[0];
$bilder[$j][0] = $sizes[1];
}
else { break; }
}
----------
Anschliessend soll der Array sortiert werden und die Bilder (<img>-Tags) gedruckt werden. Und zwar so, dass das höchste Bild an 1. Stelle ist, das 2. an 2. Stelle ... usw. :
----------
sort($bilder, SORT_NUMERIC);
for($j=0;$j<count($bilder);$j++) {
echo "<img src="" . $bilder[$j][2] . "" width="" . $bilder[$j][1] . "" height="" . $bilder[$j][0] . "">\n";
}
----------
Aber die Bilder werden nur in einer sinnlosen Reihenfolge ausgegeben. Dass die Bilder nach der höhe sortiert wurden, davon ist nichts zu sehen.
Wo liegt der Fehler???
Dake im voraus für hilfe
Michi
Hallo Michi,
if(file_exists("bilder/$j . ".jpg")) {
da fehlt vor '$j' noch ein Anführungszeichen und ein Punkt (oder hintendran ist ein Punkt und ein Anführungszeichen zu viel)
$bilder[$j][2] = "bilder/$j . ".jpg";
$sizes = getimagesize($j . ".jpg");
hier musst du in der Funktion auch auf das Verzeichnist verweisen (oder gleich $bilder[$j][2] einsetzten)
sort($bilder, SORT_NUMERIC);
ich nehme mal an, hier sortiert er nach $bilder[0], was vermutlich nicht allzuviel Sinn gibt, weil das ja die Höhe ist. Ob man sort($bilder[2],...) schreiben kann, weiß ich allerdings nicht.
Zum Sortieren nach nummern wäre aber vermutlich sowieso natsort() (http://www.php.net/natsort) besser geeignet.
for($j=0;$j<count($bilder);$j++) {
echo "<img src="" . $bilder[$j][2] . "" width="" . $bilder[$j][1] . "" height="" . $bilder[$j][0] . "">\n";
warum verwendest du für Höhe und Breite nicht einfach das was $sizes[3] (von getimagesize() oben) ausspuckt?
Aber die Bilder werden nur in einer sinnlosen Reihenfolge ausgegeben.
was gibt den print_r() vor bzw. nach sort() aus?
Grüße aus Nürnberg
Tobias
Hallo Tobias,
Hallo Michi,
if(file_exists("bilder/$j . ".jpg")) {
da fehlt vor '$j' noch ein Anführungszeichen und ein Punkt (oder hintendran ist ein Punkt und ein Anführungszeichen zu viel)$bilder[$j][2] = "bilder/$j . ".jpg";
$sizes = getimagesize($j . ".jpg");
hier musst du in der Funktion auch auf das Verzeichnist verweisen (oder gleich $bilder[$j][2] einsetzten)
Stimmt. Aber das ist in meinem Script nicht so. Ich habe das für den Forumeintrag nur schnell vereinfacht, da das Verzeichis bei mir in mehreren Unterordnern liegt. Der Syntax ist dort Ok.
sort($bilder, SORT_NUMERIC);
ich nehme mal an, hier sortiert er nach $bilder[0], was vermutlich nicht allzuviel Sinn gibt, weil das ja die Höhe ist. Ob man sort($bilder[2],...) schreiben kann, weiß ich allerdings nicht.
Zum Sortieren nach nummern wäre aber vermutlich sowieso natsort() (http://www.php.net/natsort) besser geeignet.
Ja: Das war ja auch das Ziel: Das Höchste Bild zuerst, dann das zweithöchste... Das ergibt (meiner meinung nach) schon sin.
Aber mit natsort() geht es jetzt.
for($j=0;$j<count($bilder);$j++) {
echo "<img src="" . $bilder[$j][2] . "" width="" . $bilder[$j][1] . "" height="" . $bilder[$j][0] . "">\n";
warum verwendest du für Höhe und Breite nicht einfach das was $sizes[3] (von getimagesize() oben) ausspuckt?
Das wäre auch möglich, aber ich wollte in den $bilder[X]-Array nicht noch ein weiteen String speichern. Ob ich das so wie hier oder mit $sizes[3] mache kommt aufs gleiche raus - halt ne Formsache.
Aber die Bilder werden nur in einer sinnlosen Reihenfolge ausgegeben.
was gibt den print_r() vor bzw. nach sort() aus?
Ohne sort() gibt es einfach die Bilder aus (1.jpg ... 2.jpg ... 3.jpg usw.) und mit sort ein (nicht sinn gebendes schlamassel (5.jpg ... 3.jpg ... 18.jpg ... 5.jpg). Warum weiß ich nicht. Jetzt mit natsort() geht es auf jeden Fall.
Danke nochmal!
Gruß Michi