PHP – Výběr náhodných obrázků z adresáře na serveru
Náhodné soubory s požadovanými příponami, zadaný počet nebo všechny,
17. 6. 2013
PHP funkce pro náhodný výběr zadaného počtu souborů (nebo všech, pokud jich není dostatek; nebo všech, pokud je to zadáno)
s požadovanými příponami ze zadaného adresáře na serveru (hostingu).
Typicky pro výběr a vložení potřebného počtu náhodných obrázků, např. partnerů projektu, sponzorů, referencí, ukázek, nebo ilustrační a dekorativní grafiky.
//Martin Adámek, www.adamek.cz
/////////////////////////////////////
//$pripony Seznam povolených přípon (á 3 nebo 4 znaky)
//$cesta Cesta k prohledávanému adresáři na hostingu (bez koncového lomítka)
//$kolik Názvy kolika souborů mají být vráceny (0 == všechny)
/////////////////////////////////////
//Zjištění názvů náhodných souborů požadovaných přípon požadovaného počtu v požadovaném adresáři
function vrat_nahodne_nazvy_souboru_z_adresare($pripony = array('jpg','jpeg','png'), $cesta = '', $kolik = 1) // V definici funkce uvedeny výchozí hodnoty vstupních proměnných, které se implicitně použijí, když dané proměnné nebudou při volání funkce explicitně zadány
{ //Inicializace
$kolik = intval($kolik); //Ošetření textů, desetinných čísel a jiných nehezkých hodnot //Při chybě nebo poli na vstupu vrací 0 nebo 1
if ($kolik < 0) $kolik = 0; //Ošetření záporného vstupu
$soubory = array(); //Pro nalezené vyhovující soubory
$ktere = array(); //Pro klíče odkazující na vybrané názvy souborů
$vysledek = array(); //Pro výběr k vrácení (vybrané názvy souborů)
//Načtení názvů vyhovujících souborů
$adresar = opendir($cesta);
while ($soubor = readdir($adresar))
if ( in_array( substr($soubor, strlen($soubor)-3, 3), $pripony) or in_array( substr($soubor, strlen($soubor)-4, 4), $pripony) ) // Pozn.: pro výpis souborů všech přípon bez tohoto omezení nutno vyfiltrovat adresář a nadřazený adresář: $soubor!='.' and $soubor!='..'
$soubory[] = $soubor;
closedir($adresar);
//Výběr hodnot k vrácení
if (/*count($soubory) <= 1 or */ $kolik == 0 or count($soubory) <= $kolik) // Nutno vrátit vše nalezené
// Platné podmínky: Chce všechny; nebo se jich našlo méně než je požadováno
// Zakomentovaná podmínka: Našel se žádný nebo jeden (netřeba samostatně řešit, řeší to další dvě podmínky, když nahoře zajišťujeme, že $kolik>=0 a je celé číslo)
$vysledek = $soubory; // Vracíme všechny
else // Nutno vybrat jen požadovaný počet
{ $ktere = array_rand($soubory,$kolik);
if ($kolik == 1) // array_rand vrací přímo klíč
$vysledek[] = $soubory[$ktere]; // Ale tato funkce ho vrátí jako první prvek pole, aby šlo výsledky zpracovávat jednotným způsobem
else // array_rand vrací pole klíčů
foreach ($ktere as $ktery) $vysledek[] = $soubory[$ktery];
}
return $vysledek; //Pole s názvy souborů s požadovanými příponami v požadovaném adresáři
}
//Vložení obrázků s logy partnerů projektu
function vlozlogapartneru()
{
$soubory=vrat_nahodne_nazvy_souboru_z_adresare(array('jpg','jpeg','png','gif'), '/img/logotypes', 2);
echo '<div id="partneri">';
foreach ($soubory as $soubor) echo '<img src="img/logotypes'.$soubor.'" alt="Partner projektu" title="Partner projektu" />'; // I když v tomto případě by se do altu správně měl psát přímo konkrétní název firmy (text viditelný na obrázku), což se tu neděje //V případě čistě dekorativního nebo jinak obsahově opravdu bezvýznamného obrázku nechte alt prázdný
echo '</div>';
}
Funkce array_rand() sice vrací při různých volání různé výsledky (pokud má z čeho vybírat a není nucena vrátit všechno),
zato ale vždy ve stejném vzájemném pořadí vybraných prvků.
Pro zamíchání pořadí lze použít funkci shuffle().
Martin Adámek


unikátní obsah této stránky
Navigační menu
Tyto stránky jsou pravidelně archivovány Národní knihovnou ČR pro svou kulturní, vzdělávací, vědeckou, výzkumnou nebo jinou informační hodnotu za účelem dokumentace autentického vzorku českého webu. Jsou součástí kolekce českých webových stránek, které NK ČR hodlá dlouhodobě uchovávat a zpřístupňovat pro budoucí generace. Jejich záznam je součástí České národní bibliografie a katalogu NK ČR.
Skrýt nástroje