[PHP] Jak umieścić na stronie losową grafikę, gdy obrazków w katalogu jest wiele i są ponumerowane rosnąco?
Chcesz umieścić na stronie losowy obrazek, który pochodzi z katalogu, gdzie wcześniej przygotowane zostały ponumerowane pliki, np. 01.jpg, 02.jpg, 03.jpg, itd.
Losowo wyświetlane grafiki (zdjęcia, ikonki) uatrakcyjnią serwis. Jedną z metod stworzenia losowych grafik jest ponumerowanie wszystkich plików rosnąco w pewnym zakresie (np. od 00.jpg do 99.jpg) i wylosowanie odpowiedniej liczby, a potem dodanie rozszerzenia pliku i wyświetlenia go na ekranie. Zobacz jak to najłatwiej zrobić.
<?
srand((double)microtime()*1000000);
$plik = sprintf("%02d.gif",rand(0,10));
echo "<img src=\"$plik\">";
?>
Pierwsza linijka inicjuje generator liczb pseudolosowych, aby numer był jak najbardziej przypadkowy. Wylosowanie numerka z odpowiedniego zakresu zapewnia funkcja rand(), w której wystarczy podać początek i koniec przedziału liczbowego. U nas będą to liczby od 0 do 10 (włącznie).
Pliki z grafikami warto numerować tak, aby na początku występowały zera wiodące. A więc zamiast 1.jpg, lepiej jest napisać 0001.jpg. Oczywiście nie jest to konieczne, ale jeżeli zdecydujesz się na taką numerację, trzeba wylosowaną liczbę uzupełnić o te zera.
Funkcja sprintf() pozwala tak sformatować liczbę, aby uzupełnić ją zerami. Zapis %02d oznacza, że liczba będzie zapisana na dwóch pozycjach z zerami z przodu. Analogicznie %04d oznacza liczbę złożoną z czterech cyfr z zerami poprzedzającymi. W funkcji dodawane jest od razu rozszerzenie pliku .gif.
Trzecia linijka wyświetla na ekranie grafikę o nazwie z wylosowanym numerem.
Może się zdarzyć tak, że pewne numery należy pominąć (np. plik został skasowany lub jest uszkodzony. Wtedy najlepiej napisać funkcję losującą, a do tablicy $w[] dodawać pomijane numery. Jak poniżej:
<?
function losuj() {
$w[]=1457; //pomijamy plik 1457.gif
$w[]=2398; //pomijamy plik 2398.gif
$w[]=20; //pomijamy plik 20.gif
do {
$ok=0;
$liczba = sprintf("%04d.gif",rand(0,2500));
for ($i=0;$i<count($w);$i++) {
if ($liczba==$w[$i]) $ok=1;
}
} while ($ok==1);
return $liczba;
}
srand((double)microtime()*1000000);
$plik = losuj();
echo "<img border=0 src=$plik>";
?>
Funkcja sprawadza, czy wylosowana liczba nie należy do eliminowanych liczb. Jeżeli tak, losuje nową liczbę.