Bildergalerie; sortieren mit Array

LN5

Mitglied
Hallo ihr..

ich habe bereits einmal eine ähnliche Frage gepostet und versuchte mein Problem selber zu lösen. Irgendwie geht's einfach nicht. Ich habe folgendes Script, welches mir die Bilder ausliest und ausgibt mit echo$Table;

PHP:
<?php
$PfadThumbnails="images/pictures/thumbnails/";
$PfadBilder="images/pictures/";
$AnzahlThumbnailsProZeile=40;
if($Verzeichniszeiger=opendir($PfadThumbnails))
{
	$Table="<table border=\"0\" cellpadding=\"2\" width=\"100%\" cellspacing=\"5\" class=\"text\" align=\"center\"><tr align='center' valign='top'>";
	$i=0;
	while($Datei=readdir($Verzeichniszeiger))
	{
		if(substr($PfadThumbnails.strtolower($Datei), -4)==".jpg" || substr($PfadThumbnails.strtolower($Datei), -5)==".jpeg" || substr(strtolower($PfadThumbnails.$Datei), -4)==".gif" || substr($PfadThumbnails.strtolower($Datei), -4)==".png")
		{
			$Bilddaten=getimagesize($PfadBilder.substr($Datei, 3));
			$Bildbreite=$Bilddaten[0];
			$Bildhoehe=$Bilddaten[1] + 90;
			$Thumbnaildaten=getimagesize($PfadThumbnails.$Datei);
			$Thumbnailbreite=$Thumbnaildaten[0];
			$Thumbnailhoehe=$Thumbnaildaten[1];
			$wer= substr($Datei, 3, -4);
			$pfad= substr($PfadBilder, 0, -1);
			$ordner= substr($PfadBilder, 0, -1);
					$Table.="<td valign='top'><a href=\"fotos.php?foto=$wer.jpg\" target='foto_frame'><img border=\"1\" class=\"IMG\" height=\"".$Thumbnailhoehe."\" src=\"".$PfadThumbnails.$Datei."\" title=\"Zum Vergrössern aufs Foto klicken\" width=\"".$Thumbnailbreite."\"></a><br><strong>$txt</strong></td>";
			$i++;
		}
	}
	$Table.="</tr></table>";
	closedir($Verzeichniszeiger);
}
?>

Nun mein Problem:

Ich möchte, dass diese Bilder in einer bestimmten Reihenfolge ausgegeben werden (z.B. alphabetisch). Dies nicht zuletzt deshalb, weil ich meinen Usern eine einfachere Bedienung mit einer "Weiter-Taste" ermöglichen möchte. Damit das Script aber weiss, welches Bild es als nächstes Aufrufen soll, muss eine bestimmte Reihenfolge bestehen, oder?

Kann mir jemand weiterhelfen?

PS: Habe bereits einen Artikel mit der Suchfunktion gefunden, werde aber einfach nicht schlau daraus.
 
Hallo, du....


Naja.... der von dir gewählte Thementitel beinhaltet doch schon die Lösung.
Anstatt die Bildernamen sofort auszugeben, speichere sie in einem Array....

Diesen kannst du dann bequem sortieren und anschliessend die Tabelle daraus erzeugen.
 
:) in dem Fall muss ich meine Frage anderst stellen:

Kann mir jemand weiterhelfen? Ich weiss nicht wie man Arrays macht und sortiert. :-(
 
Besten Dank forsterm. Sehe ich das richtig, dass bei mir $Datei in ein Array gepackt werden muss?

Also:

PHP:
$Datei = array ("$Datei2");
sort ($Datei);
reset ($Datei);
while (list ($key, $val) = each ($Datei)) {
   echo "$Datei[".$key."] = ".$val."\n";
}

Bemerkung: Um nicht im ganzen Script $Datei zu ändern, nehme ich einfach beim ersten $Datei $Datei2.
 
Hmm.. wo mache ich den Überlegungsfehler?
PHP:
<?php
$PfadThumbnails="images/pictures/thumbnails/";
$PfadBilder="images/pictures/";
$AnzahlThumbnailsProZeile=40;
if($Verzeichniszeiger=opendir($PfadThumbnails))
{
	$Table="<table border=\"0\" cellpadding=\"2\" width=\"100%\" cellspacing=\"5\" class=\"text\" align=\"center\"><tr align='center' valign='top'>";
	$i=0;
	$Datei2=readdir($Verzeichniszeiger);
	$Datei = array ("$Datei2");
sort ($Datei);
reset ($Datei);
while (list ($key, $val) = each ($Datei)) {
		
		if(substr($PfadThumbnails.strtolower($Datei), -4)==".jpg" || substr($PfadThumbnails.strtolower($Datei), -5)==".jpeg" || substr(strtolower($PfadThumbnails.$Datei), -4)==".gif" || substr($PfadThumbnails.strtolower($Datei), -4)==".png")
		{
			$Bilddaten=getimagesize($PfadBilder.substr($Datei, 3));
			$Bildbreite=$Bilddaten[0];
			$Bildhoehe=$Bilddaten[1] + 90;
			$Thumbnaildaten=getimagesize($PfadThumbnails.$Datei);
			$Thumbnailbreite=$Thumbnaildaten[0];
			$Thumbnailhoehe=$Thumbnaildaten[1];
			$wer= substr($Datei, 3, -4);
			$pfad= substr($PfadBilder, 0, -1);
			$ordner= substr($PfadBilder, 0, -1);
					$Table.="<td valign='top'><a href=\"fotos.php?foto=$wer.jpg\" target='foto_frame'><img border=\"1\" class=\"IMG\" height=\"".$Thumbnailhoehe."\" src=\"".$PfadThumbnails.$Datei."\" title=\"Zum Vergrössern aufs Foto klicken\" width=\"".$Thumbnailbreite."\"></a><br><strong>$txt</strong></td>";
			$i++;
		}
	}
	$Table.="</tr></table>";
	closedir($Verzeichniszeiger);
}
?><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
"http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
<title>Unbenanntes Dokument</title>
<link rel="stylesheet" type="text/css" href="style.css">

</head>

<body bgcolor="#000000" leftmargin="0" topmargin="0" marginwidth="0" marginheight="0" scroll="auto">
<?php
echo"$Table";
?>
</body>
</html>
 
Der Fehler besteht darin, dass du die Daten direkt ausgibst, anstatt sie – wie Sven es bereits erwähnte – erst in einem Array zu speichern und diesen dann zu verarbeiten.
 
bin jetzt nochmal die Einleitung durchgegangen. Aber was mach ich konkret falsch? Also wie würde das Array den richtig aussehen? :s Ich pack dass doch in ein array()..
 
Hallo,
ich hab mal eben ein Beispiel Script geschrieben, welches von allen *.jpg und *.gif Bilder den Pfad und die Größe als Text alphabetisch sortiert ausgibt. Voraussetzung dafür ist, dass die Bilder in beiden Verzeichnissen die gleichen Namen Besitzen.
PHP:
<?
$pfadthumbnail = './bilder/small/';
$pfadorginal = './bilder/big/';
$dir = opendir($pfadthumbnail);
 
$i = 0;
while ($datei = readdir($dir)){
	if (is_file($pfadthumbnail.$datei)){
	 $endung = strtolower($datei);
	 if (substr($endung, -4) == '.jpg' || substr($endung, -4) == '.gif'){
		$bild[$i]['pfadthumbnail'] = $pfadthumbnail;
		$bild[$i]['pfadorginal'] = $pfadorginal; 
		$bilddaten = getimagesize($pfadthumbnail.$datei);	 
		$bild[$i]['thumbnailbreite'] = $bilddaten[0];
		$bild[$i]['thumbnailhoehe'] = $bilddaten[1];
		$bilddaten = getimagesize($pfadorginal.$datei);	 
		$bild[$i]['orginalbreite'] = $bilddaten[0];
		$bild[$i]['orginalhoehe'] = $bilddaten[1];
		$bild[$i]['thumbnailname'] = $datei;
		$i++;
	 }
	}
}
sort($bild);
?><table><?
for ($i = 0; $i < count($bild); $i++){
	echo '<tr><td>Thumbnail: '.$bild[$i]['pfadthumbnail'].$bild[$i]['thumbnailname'].' ('.$bild[$i]['thumbnailbreite'].' x '.$bild[$i]['thumbnailhoehe'].')</tr><tr><td>Orginal: '.$bild[$i]['pfadorginal'].$bild[$i]['thumbnailname'].' ('.$bild[$i]['orginalbreite'].' x '.$bild[$i]['orginalhoehe'].')</td></tr><tr><td><br></td></tr>';
}
?></table>

Es sollte eigentlich für dich kein Problem sein das Script an deine Bedürfnisse anzupassen.

mfg
forsterm
 
Zuletzt bearbeitet:
Probier mal Folgendes:
PHP:
<?php

	$dir_images = 'images/pictures/';
	$dir_thumbnails = 'images/pictures/thumbnails/';

	$files = array();
	$handle = opendir($dir_images);
	while( $file = readdir($handle) ) {
		if( !preg_match('/.+\.(?:gif|jpe?g|png)$/', $file) ) {
			continue;
		}
		$files[] = $file;
	}
	closedir($handle);
	sort($files);

	…

	echo '<dl>';
	foreach( $files as $file ) {
		echo '<dt><a href="fotos.php?foto='.rawurlencode($file).'" target="foto-frame"><img src="'.$dir_thumbnails.array_pop(explode('/', $file)).'"></a></dt><dd>'.$txt.'</dd>';
	}
	echo '</dl>';

?>
 
Zurück