Autor Zpráva
milan
Profil *
Dobrý den,
chtěl bych poprosit o radu zda nevíte jak lze upravit podmínku pro výpis pouze určitého počtu souborů. Zda vůbec lze tuto podmínku upravit tak aby se mi vypsaly např. jen tři fotografie..

Moc děkuji za pomoc Milan

while (false!==($file = readdir($cesta))) {
             
       if ($file != "." && 
            $file != ".." && 
            )
        }    
Chro
Profil
Jaké tři, první, poslední, náhodné?
milan
Profil *
Chro:
Děkuji za rychlou reakci, jednalo by se mi o první tři. Pokud by to šlo tak bych byl moc vděčný za ukázku všech tří možností.

Díky Milan
Chro
Profil
<?php
//na while s readdir zapomeň

$cesta = 'obrazky/';
//soubory do pole
$soubory = glob($cesta.'*.*');
//*.* znamená načti všechny soubory s název.přípona
//*.jpg by bylo načti cokoliv s příponou jpg

//první tři
//výpis souborů
echo <<<EOT
<img src="{$soubory[0]}">
<img src="{$soubory[1]}">
<img src="{$soubory[2]}">
EOT;

//poslední tři
$pocet = count($soubory);
$vypis = array($soubory[$pocet - 3], $soubory[$pocet - 2], end($soubory));
//výpis souborů
echo <<<EOT
<img src="{$vypis[0]}">
<img src="{$vypis[1]}">
<img src="{$vypis[2]}">
EOT;

//tři náhodné
$pocet = count($soubory);
$vypis = array();
while (TRUE)
{
$nahodne_cislo = rand(0, $pocet - 1);
$nahodny_soubor = $soubory[$nahodne_cislo];
if (!in_array($nahodny_soubor, $vypis))
{
$vypis[] = $nahodny_soubor;
if (count($vypis) === 3)
{
break;
}
}
}
//výpis souborů
echo <<<EOT
<img src="{$vypis[0]}">
<img src="{$vypis[1]}">
<img src="{$vypis[2]}">
EOT;
?>



EDIT:
Pro 3 náhodné obrázky mě ještě napadlo efektivnější řešení se shuffle.
$cesta = 'obrazky/';
$soubory = glob($cesta.'*.*');
shuffle($soubory);
echo <<<EOT
<img src="{$soubory[0]}">
<img src="{$soubory[1]}">
<img src="{$soubory[2]}">
EOT;
milan
Profil *
Chro:
Moc díky za pomoc, perfektní i s komentářem.

Přeji pěkný večer, Milan.
Chro
Profil
Také přeji pěkný večer, John.
Alphard
Profil
Chro [#4]:
Když bude souborů méně než 3, parádně se náhodný výpis zacyklí :-)
Chro
Profil
Max execution time to jistí, Alpharde. :-) Z dotazu mi vyplynulo, že Milan ví co dělá a ve složce má obrázků "požehnaně".
milan
Profil *
Chro, Alphard:

Díky, opravdu ve složkách mám vždy obrázků více než tři.

Díky Milan
juriad
Profil
Pro výběr několika náhodných prvků z pole existuje funkce array_rand; bacha na to, že se chová jinak, když je požadovaný jediný prvek.
Alphard
Profil
Chro:
Já jen upozorňuji, spíše milana.

Ono tohle je dost zákeřná chyba. Když v ostatních výpisech bude málo souborů, skončí to nějakým Notice a uživatel ani neuvidí, že něco nevidí. Tady to ale bude horší.
Třeba po nasazení nové kopie webu apod. může být problém. Když se napíše while(true), měl by se člověk ujistit, že ten cyklus má konec. Ten count() by klidně mohl být u cyklu klasicky, aspoň by to tak nedrážilo :-)
while (count($vypis) < min(RAND_COUNT, count($soubory))

Jednodušší, ale na výkon náročnější řešení, je použít shuffle().
Chro
Profil
Alphard [#11]:
Dobrá idea. Holt zkušenosti. :-)

juriad [#10]:
O této funkci jsem nevěděl. Díky.

Vaše odpověď

Mohlo by se hodit


Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm: