Merhabalar,
PHP yardımı ile bir dizinde yer alan birden çok dosya içerisinde belli sayıda rastgele dosyayı döndürecek bir fonksiyon oluşturacağız. Aşağıda doğrudan fonksiyonu sizlerle paylaşacağım fakat fonksiyonda yer alan bir takım ibareleri öncesinde açıklamak istiyorum.
1. Adım: opendir() fonksiyonu yardımı ile fonksiyona gelen dizine ulaşıyoruz.
2. Adım: $dosyaAdlari adında bir array oluşturuyoruz. Çünkü dosya adlarını başlangıçta bir arrayde tutacağız. Fonksiyona gelen 2. parametre eğer null ise doğrudan klasördeki tüm dosyaları döndürmek için bu değişkeni kullanacağız.
3. Adım: While içerisinde klasörde yer alan tüm dosyaları $dosyaAdlari arrayine aktarıyoruz (array_push() yardımı ile). Burada while içinde yer alan if kontrolü ise her klasörde standart olarak yer alan "." ve ".." dizin kontrollerini pas geçmek içindir.
4. Adım: If kontrolümüzün amacı fonksiyonda tüm değerlerin mi dönmesi isteniyor yoksa yalnızca belli sayıda rastgele değer mi isteniyor onu anlamak içindir. Eğer ikinci bir parametre varsa ya da girilen parametre sayısı klasörün içerisindeki sayıdan daha fazla ise hata vermemesi için tüm değerlerin döndürülmesini belirtiyoruz (Bu durumda tüm değerler $dosyaAdlari değişkeni oluyor).
5. Adım: Else yapımızda ise ilk olarak dosyamızda kaç adet görsel olduğunu count() fonksiyonu yardımı ile hesaplayıp $adet değişkenimize yüklüyoruz. Ardından $random değişkenimizde ise array_rand() fonksiyonu sayesinde $dosyaAdlari değişkenimizden istenen dosya sayısı kadar rastgele değer çağırıyoruz. Bu fonksiyon bize $dosyaAdlari arrayimizden rastgele keyler göndermekte. Akabinde $rastgeleDosyalar adında oluşturduğumuz yeni arrayimize for içerisinde rastgele gelen keyleri çağırarak yine array_push() yardımı ile ekliyoruz ve $rastgeleDosyalar arrayimizi return ediyoruz.
function dizin($dizin, $kacGorsel = null)
{
$dizin = opendir($dizin);
$dosyaAdlari = array();
while($dosya = readdir($dizin)) {
if ($dosya !== "." && $dosya !== "..") {
array_push($dosyaAdlari, $dosya);
}
}
if ($kacGorsel == null || count($dosyaAdlari) < $kacGorsel) {
return $dosyaAdlari;
} else {
$adet = count($dosyaAdlari);
$rastgele = array_rand($dosyaAdlari, $kacGorsel);
$rastgeleDosyalar = array();
for ($i=0; $i < $kacGorsel; $i++) {
array_push($rastgeleDosyalar, $dosyaAdlari[$rastgele[$i]]);
}
return $rastgeleDosyalar;
}
}
$gorseller = dizin("resim", 4);
print_r($gorseller);
ÇIKTI
Array ( [0] => Hydrangeas.jpg [1] => Koala.jpg [2] => Lighthouse.jpg [3] => Tulips.jpg )