Antworten auf deine Fragen:
Neues Thema erstellen

Reihenfolge durcheinanderwürfeln

H

Hagbard_Celine

Guest

Ich habe ein Script mit dem ich eine bestimmte Anzahl (10) Bilder aus einem bestimmten Ordner auslese und diese in einem <img>-Tag ausgeben lasse.

Leider werden die Bilder dann immer alphanumerisch sortiert, also z.B. so:
HTML:
<img src="img/galleries/theater/Theater_02.jpg" width="650" height="400"" />
<img src="img/galleries/theater/Theater_04.jpg" width="650" height="400"" />
<img src="img/galleries/theater/Theater_06.jpg" width="650" height="400"" />
<img src="img/galleries/theater/Theater_07.jpg" width="650" height="400"" />
<img src="img/galleries/theater/Theater_09.jpg" width="650" height="400"" />
<img src="img/galleries/theater/Theater_12.jpg" width="650" height="400"" />
<img src="img/galleries/theater/Theater_14.jpg" width="650" height="400"" />
<img src="img/galleries/theater/Theater_15.jpg" width="650" height="400"" />
<img src="img/galleries/theater/Theater_16.jpg" width="650" height="400"" />
<img src="img/galleries/theater/Theater_19.jpg" width="650" height="400"" />
Gibt es da noch eine Möglichkeit, die Reihenfolge der Bilder durcheinanderzumischen?

Ach ja hier mein Script:
PHP:
<?php 
	$bilder = glob("img/galleries/event/*.jpg");
	$bild = array_rand($bilder, 10);
	foreach ($bild as $zufallsbild)
		{
			$bildinfo = getimagesize ($bilder[$zufallsbild]);
			echo '<img src="' .$bilder[$zufallsbild]. '" ' .$bildinfo[3]. '" />' . "\n";
		}
?>

Gruß und Danke, Hagbard
 

Duddle

Posting-Frequenz: 14µHz

AW: Reihenfolge durcheinanderwürfeln

Bei mir funktioniert dein Code wie gewünscht. Ich sehe auch direkt keine mögliche Fehlerquelle. Lass dir mal $zufallsbild jeweils ausgeben.
Ansonsten kannst du es auch mit shuffle() machen.


Duddle
 
H

Hagbard_Celine

Guest

AW: Reihenfolge durcheinanderwürfeln

Ja das Script funktioniert ja, es holt zufällig Bilder aus dem Ordner.

Nur wenn es 3 mal hintereinander das Bild_02.jpg holt, dann ist das immer an erster Stelle!

Ich möchte das die zufällig herausgeholten Bilder dann in der HTML-Datei nicht sortiert werden, also z.B. so:
HTML:
<img src="img/galleries/theater/Theater_19.jpg" width="650" height="400"" />
<img src="img/galleries/theater/Theater_04.jpg" width="650" height="400"" />
<img src="img/galleries/theater/Theater_12.jpg" width="650" height="400"" />
<img src="img/galleries/theater/Theater_16.jpg" width="650" height="400"" />
<img src="img/galleries/theater/Theater_09.jpg" width="650" height="400"" />
<img src="img/galleries/theater/Theater_07.jpg" width="650" height="400"" />
<img src="img/galleries/theater/Theater_14.jpg" width="650" height="400"" />
<img src="img/galleries/theater/Theater_06.jpg" width="650" height="400"" />
<img src="img/galleries/theater/Theater_15.jpg" width="650" height="400"" />
<img src="img/galleries/theater/Theater_02.jpg" width="650" height="400"" />

Gruß Hagbard
 

Duddle

Posting-Frequenz: 14µHz

AW: Reihenfolge durcheinanderwürfeln

Genau das meine ich auch. Er sollte dir mit dem o.g. Code bei jedem Seitenaufruf eine andere, zufällige Anordnung ausgeben. Ich weiß aber nicht, was du mit
Nur wenn es 3 mal hintereinander das Bild_02.jpg holt, dann ist das immer an erster Stelle!
meinst.


Duddle
 
H

Hagbard_Celine

Guest

AW: Reihenfolge durcheinanderwürfeln

Genau das meine ich auch. Er sollte dir mit dem o.g. Code bei jedem Seitenaufruf eine andere, zufällige Anordnung ausgeben. Ich weiß aber nicht, was du mit meinst.


Duddle

Bei mir holt das Script 10 zufällig gewählte Bilder aus einem Ordner.
Da in dem Ordner momentan nur 19 Bilder sind, kommt es vor das z.B. Bild Nr. 01 mehrmals hintereinander geladen wird.
Im HTML werden die Bilder aber immer alphanumerisch sortiert, das sollen sie aber nicht, damit z.B.:

Wenn Bild_01.jpg nach einem Reload wieder geladen wird, dieses nicht wieder an erster Stelle steht.

Vielleicht sollte ich noch erwähnen das es sich dabei um das befüllen einer Slideshow handelt.

Gruß Hagbard
 

Duddle

Posting-Frequenz: 14µHz

AW: Reihenfolge durcheinanderwürfeln

Im HTML werden die Bilder aber immer alphanumerisch sortiert

Bist du sicher? glob() holt die Dateinamen wie sie im Verzeichnis auftreten (ergo alphanumerisch), danach lässt du dir ein Array mit 10 zufälligen Zahlen aus 19 erzeugen und gehst Schritt für Schritt durch. Es ist daher sehr unwahrscheinlich, dass diese Zahlen sortiert sind.

Es kann aber sehr wohl sein, dass Zahl x mehrmals hintereinander an yter Stelle erzeugt wird. Das kannst du aber kaum verhindern, ausser du merkst dir die Reihenfolgen der letzten z Seitenaufrufe.

Vielleicht sortiert diese Slideshow nochmal die übergebenen Dateien. Das bezweifle ich zwar, aber es wäre möglich.


Duddle
 
H

Hagbard_Celine

Guest

AW: Reihenfolge durcheinanderwürfeln

Ich glaube auch nicht das das Slideshow-Script da was sortiert, denn es handelt sich im Prinzip nur um einen jQuery-Slider der die Bilder nacheinander abspielt.

Aber egal wie oft ich die Seite neu lade und danach den Source-Code ansehe, die Bilder sind dann im HTML immer sortiert.
 

MegaAdi

Freak

AW: Reihenfolge durcheinanderwürfeln

Welches jQuery-Slideshow PlugIn verwendest du denn?

lass dir doch in deinem PHP-Programm das array ausgeben bzw in der foreach-Schleife anstatt das Bid zu generieren einfach mal den Dateinamen ausgeben lassen:

echo $zufallsbild."<br />";

Dann weist du ob des array im php sortiert wird (is quatsch) oder im Javascript (denk ich mir jetzt mal).

Gruß Adrian
 

sokie

Mod | Web

AW: Reihenfolge durcheinanderwürfeln

wenn ich aus einem array von 19 10 zufällige anzeigen will, dann muss ich doch nur das array mischen (shuffle($array);) und dann meinetwegen per "for schleife" die ersten zehn Auslesen.
Dann ist sowohl die Auswahl als auch die Reihenfolge "zufällig".
PHP:
$bilder = glob("verzeichnisname/*.jpg");
shuffle($bilder);
for ($i=0;$i<10;$i++){
  echo "<img src=\"".$bilder[$i]."\" />\n";
}
 
Zuletzt bearbeitet:

cebito

undefined

AW: Reihenfolge durcheinanderwürfeln

Wie duddle bereits sagte, mit shuffle kommst du weiter...

PHP:
 <?php 
    $bilder = glob("img/galleries/event/*.jpg");
    $bild = array_rand($bilder, 10);
    shuffle($bild);
    foreach ($bild as $zufallsbild)
        {
            $bildinfo = getimagesize ($bilder[$zufallsbild]);
            echo '<img src="' .$bilder[$zufallsbild]. '" ' .$bildinfo[3]. '" />' . "\n";
        }
?>
 

MegaAdi

Freak

AW: Reihenfolge durcheinanderwürfeln

ahh daher weht der Wind ;) dann ist es natürlich klar dass shuffle() verwendet werden muss.
 
H

Hagbard_Celine

Guest

AW: Reihenfolge durcheinanderwürfeln

Ihr seid Spitze

Mit diesem Code funktioniert es einwandfrei:
PHP:
 <?php 
    $bilder = glob("img/galleries/event/*.jpg");
    $bild = array_rand($bilder, 10);
    shuffle($bild);
    foreach ($bild as $zufallsbild)
        {
            $bildinfo = getimagesize ($bilder[$zufallsbild]);
            echo '<img src="' .$bilder[$zufallsbild]. '" ' .$bildinfo[3]. '" />' . "\n";
        }
?>
Vielen Dank an alle :)

Dankend Hagbard
 
H

Hagbard_Celine

Guest

AW: Reihenfolge durcheinanderwürfeln

Ich habe noch eine Frage zu diesem Thema :)

Ich erhalte folgende Fehlermeldung im Browser, wenn ich die Seite lokal teste und dafür den in Snow-Leopard integrierten Webserver benutze:

Warning
: array_rand() []: Second argument has to be between 1 and the number of elements in the array in on line : shuffle() expects parameter 1 to be array, null given in on line : Invalid argument supplied for foreach() in on line

Dies ist der Code welchen ich in der Seite benutze:
PHP:
      <?php 
    $bilder = glob("img/galerie/rubrik_001/*.jpg");
    $bild = array_rand($bilder, 10);
    shuffle($bild);
    foreach ($bild as $zufallsbild)
        {
            $bildinfo = getimagesize ($bilder[$zufallsbild]);
            echo '<img src="' .$bilder[$zufallsbild]. '" ' .$bildinfo[3]. '" />' . "\n";
        }
?>

Weiß jemand woran das liegt?
 

cebito

undefined

AW: Reihenfolge durcheinanderwürfeln

Wie viele Bilder(jpg) sind denn in deinem Ordner "rubrik_001"? Wenn es weniger als 10 sind, kann das nicht funktionieren, array_rand erwartet als zweiten Parameter eine Zahl zwischen 1 und der Länge des übergebenen Arrays. Du könntest, wenn weniger als 10 Bilder drin sind die Anzahl nehmen, sonst eben 10...
PHP:
$bilder = glob("img/galerie/rubrik_001/*.jpg"); 
if(count($bilder)<10){
    $i = count($bilder);
}else{
    $i = 10;
}
$bild = array_rand($bilder, $i);
 
Zuletzt bearbeitet:
H

Hagbard_Celine

Guest

AW: Reihenfolge durcheinanderwürfeln

Es sind über 30 Bilder drinnen.

Online funktioniert das ganze nur mit dem in Mac OS X integrierten Testserver nicht.
Ich hatte hier auch das Problem das die Datum-Funktion also date() nicht akzeptiert wurde man muss date_default_timezone_set('Europe/Berlin'); voran setzen.

Also ist hier irgend ein Fehler den ich als PHP-Dummy nicht einmal verstehe...
 

sokie

Mod | Web

AW: Reihenfolge durcheinanderwürfeln

Hallo Hagbard_Celine,
das Problem scheint nach der Fehlermelung mit der function array_rand() zu entstehen (in deiner lokalen Umgebung).
für deine gewünschte Funktionalität brauchst du das gar nicht zwingend.
wenn du das array (was du aus dem glob() erhältst) einfach mit shuffle() 'durcheinanderwürfelst, kannst du einfach die ersten zehn Einträge nehmen (die ja schon zufällig sind). Somit kannst du das dann sowohl lokal als auch im Web gleichermassen benutzen:
PHP:
$bilder = glob("img/galerie/rubrik_001/*.jpg");
$gemischt = shuffle($bilder);
for ($i = 0; $i<10; $i++){
  echo '<img src="'.$gemischt[$i].'" />'."\n"; //vereinfacht
}
so liessen sich aus einem Array von 30 Bildern 10 in zufälliger Reihenfolge ausgeben.

die default zeitzone wird in der php.ini eingestellt - das dürfte aber nur eine warnung ausgeben, aber nicht zum abbruch per Fehler führen.

http://php.net/manual/en/function.date-default-timezone-set.php
 
Zuletzt bearbeitet:
H

Hagbard_Celine

Guest

AW: Reihenfolge durcheinanderwürfeln

Vielen Dank für Deine Antwort, sokie!

Leider funktioniert dieser Code nicht:
PHP:
$bilder = glob("img/galerie/rubrik_001/*.jpg");
$gemischt = shuffle($bilder);
for ($i = 0; $i<10; $i++){
  echo '<img src="'.$gemischt[$i].'" />'."\n"; //vereinfacht
}
Es wird kein Bild angezeigt...

Der Online-Source-Code sieht so aus:
HTML:
<div class="slideshow">
    <img src="" />
    <img src="" />
    <img src="" />
    <img src="" />
    <img src="" />
    <img src="" />
    <img src="" />
    <img src="" />
    <img src="" />
    <img src="" />
</div>
 

Duddle

Posting-Frequenz: 14µHz

AW: Reihenfolge durcheinanderwürfeln

shuffle() mischt in-place, gibt also kein neues Array zurück.
PHP:
$bilder = glob("img/galerie/rubrik_001/*.jpg");
shuffle($bilder);
for ($i = 0; $i<10; $i++){
  echo '<img src="'.$bilder[$i].'" />'."\n"; //vereinfacht
}


Duddle
 
Bilder bitte hier hochladen und danach über das Bild-Icon (Direktlink vorher kopieren) platzieren.
Antworten auf deine Fragen:
Neues Thema erstellen

Willkommen auf PSD-Tutorials.de

In unseren Foren vernetzt du dich mit anderen Personen, um dich rund um die Themen Fotografie, Grafik, Gestaltung, Bildbearbeitung und 3D auszutauschen. Außerdem schalten wir für dich regelmäßig kostenlose Inhalte frei. Liebe Grüße senden dir die PSD-Gründer Stefan und Matthias Petri aus Waren an der Müritz. Hier erfährst du mehr über uns.

Stefan und Matthias Petri von PSD-Tutorials.de

Nächster neuer Gratisinhalt

03
Stunden
:
:
25
Minuten
:
:
19
Sekunden

Flatrate für Tutorials, Assets, Vorlagen

Zurzeit aktive Besucher

Statistik des Forums

Themen
118.636
Beiträge
1.538.485
Mitglieder
67.559
Neuestes Mitglied
hanuta
Oben