• Jetzt anmelden. Es dauert nur 2 Minuten und ist kostenlos!

Frage $array[0] darf nicht bestimmen Inhalt haben

Space Vampire

Senior HTML'ler
Ich habe hier gerade ein Problem, dass ich nicht ganz verstehe. Ich möchte 9 Bilder in zufälliger Reihenfolge ausgeben.
Dazu shuffle ich ein Array.

Bild 3 darf jedoch nie an erster Stelle kommen.
Ich schaue also nach, was nach dem Schuffle in $array[0] ist.
Falls besagtes Bild darin ist, drehe ich das Array einfach um.

Denke ich jedenfalls. Funktioniert aber nicht, und ich weiß nicht wieso.

PHP:
$images = array(1, 2, 3, 4, 5, 6, 7, 8, 9);
    shuffle($images);
    if($images[0] == 3){
        array_reverse($images);
    }
    foreach ($images as $img) {
        if($img != 3){
            $link = "error.php";
        }else{
            $link = "mailto:[email protected]";
        }
        echo '<a href="'.$link.'"><img src="images/email/'.$img.'.png"></a>';
    }

Das ist jetzt schon mein zweiter Lösungsansatz. Zuvor wollte ich mit while so lange shufflen lassen, bis $array[0] nicht 3 ist.
Eine Anregung wo mein Denkfehler ist wäre toll.
 
Werbung:
Ich habe hier gerade ein Problem, dass ich nicht ganz verstehe. Ich möchte 9 Bilder in zufälliger Reihenfolge ausgeben.
Dazu shuffle ich ein Array.

Bild 3 darf jedoch nie an erster Stelle kommen.
Ich schaue also nach, was nach dem Schuffle in $array[0] ist.
Falls besagtes Bild darin ist, drehe ich das Array einfach um.

Denke ich jedenfalls. Funktioniert aber nicht, und ich weiß nicht wieso.

PHP:
$images = array(1, 2, 3, 4, 5, 6, 7, 8, 9);
    shuffle($images);
    if($images[0] == 3){
        array_reverse($images);
    }
    foreach ($images as $img) {
        if($img != 3){
            $link = "error.php";
        }else{
            $link = "mailto:[email protected]";
        }
        echo '<a href="'.$link.'"><img src="images/email/'.$img.'.png"></a>';
    }

Das ist jetzt schon mein zweiter Lösungsansatz. Zuvor wollte ich mit while so lange shufflen lassen, bis $array[0] nicht 3 ist.
Eine Anregung wo mein Denkfehler ist wäre toll.

array_reverse gibt das umgedrehte Array zurück:

$images = array_reverse($images)
 
Also so, wie ich es geschrieben hab funktioniert array_reverse nicht? Ok, damit wäre der Fehler gefunden. Jetzt funktioniert es.

Kannst du mir vielleicht noch sagen, warum mein erster Lösungsansatz nicht funktioniert hat?

PHP:
while($images[0] == 3){  shuffle($images;) }

Muss ich dafür auch die Variable neu schreiben? Also

PHP:
while($images[0] == 3){  $images = shuffle($images;) }
?

Dann versteh ich nur nicht, warum shuffle so wie in meinem obigen Code funktioniert.
 
Werbung:
Also so, wie ich es geschrieben hab funktioniert array_reverse nicht? Ok, damit wäre der Fehler gefunden. Jetzt funktioniert es.

Kannst du mir vielleicht noch sagen, warum mein erster Lösungsansatz nicht funktioniert hat?

PHP:
while($images[0] == 3){  shuffle($images;) }

Muss ich dafür auch die Variable neu schreiben? Also

PHP:
while($images[0] == 3){  $images = shuffle($images;) }
?

Dann versteh ich nur nicht, warum shuffle so wie in meinem obigen Code funktioniert.

Nein nein, shuffle nimmt eine Referenz und hat keine Rückgabe.
Kann jetzt keinen Fehler erkennen.

Das müsste jedenfalls funktionieren:

PHP:
do {
  shuffle($images);
} while($images[0] == 3);
 
Zurück
Oben