|
| Arrays og listning, hvordan kontrolleres a~ Fra : Jakob Munck |
Dato : 04-07-06 13:24 |
|
Jeg har noget kode, som lister filerne i en mappe som et array, og som
præsenterer dem på en side. Det virker fint. Men jeg har 2 problemer, som
jeg gerne vil finde en løsning på:
1. Hvordan begrænser jeg denne listning. Hvis nu er der 200 filer i mappen,
og jeg kun ønsker at vise de 20 første, hvad skal jeg så gøre?
2. Og hvordan vendes rækkefølgen, som filerne listes i? Nu sker det
alfabetisk a-z, men hvis jeg nu vil lave det z-a, hvad skal jeg så gøre?
Her er koden:
<?php
$i=0;
$thumbs = 'img_thumb/'; //mappe til thumnails
$imgdir = 'img_store/'; // mappe til store billeder
$allowed_types = array('jpg','JPG'); // filtyper der er tilladte
$dimg = opendir($thumbs);
$image = array();
while($imgfile = readdir($dimg))
if (in_array(strtolower(substr($imgfile,-3)),$allowed_types)) $a_img[] =
$imgfile;
sort($a_img);
$i=0;
foreach ($a_img as $image) {
echo "<td><a href='vis_stort.php?id=$i'><img src='$thumbs$image'"
.."width='120' height='90' border='0' title='$image'></a></td>\n";
if (++$i % 4 == 0) echo "<tr></tr>\n";
}
?>
Undskyld min mange spørgsmål om arrays. Hvis nogle har et godt link, som er
forståeligt og hvor jeg kan lære mere om dette, vil jeg godt have det.
v.h.
Jakob
| |
Bertel Lund Hansen (04-07-2006)
| Kommentar Fra : Bertel Lund Hansen |
Dato : 04-07-06 14:19 |
|
Jakob Munck skrev:
> 1. Hvordan begrænser jeg denne listning. Hvis nu er der 200 filer i mappen,
> og jeg kun ønsker at vise de 20 første, hvad skal jeg så gøre?
Så laver du en tæller og afbryder når den når 20. Men den styring
som jeg tror du ønsker, er ret kompleks og må nok hellere vente
til du selv kan hitte ud af den.
Hvis du vil begrænse antallet, kan du ikke bruge den nemme
foreach().
for ($nr=0; $nr<count($a_img); ++$nr) {
echo nogetvældigsmartmed $a_img[$nr];
if ($nr==20) break;
}
Men med den løkke kan du ikke komme længere end til 20. Den kan
laves kortere, men jeg har vist hvordan man kan 'overstyre' inde
i en løkke.
> 2. Og hvordan vendes rækkefølgen, som filerne listes i? Nu sker
> det alfabetisk a-z, men hvis jeg nu vil lave det z-a, hvad
> skal jeg så gøre?
Hvis du kun skal bruge den modsatte rækkefølge, skal du bare
bruge rsort() i stedet for sort().
Hvis du først vil sortere og bagefter vende rækkefølgen, kan du
bruge sort() og bagefter array_reverse().
--
Bertel
http://bertel.lundhansen.dk/ http://fiduso.dk/
| |
Jakob Munck (04-07-2006)
| Kommentar Fra : Jakob Munck |
Dato : 04-07-06 17:04 |
|
"Bertel Lund Hansen" <nospamfilius@lundhansen.dk> skrev i en meddelelse
news:44aa6ac7$0$1964$ba624c82@nntp02.dk.telia.net...
> Jakob Munck skrev:
>
>> 1. Hvordan begrænser jeg denne listning. Hvis nu er der 200 filer i
>> mappen,
>> og jeg kun ønsker at vise de 20 første, hvad skal jeg så gøre?
>
> Så laver du en tæller og afbryder når den når 20. Men den styring
> som jeg tror du ønsker, er ret kompleks og må nok hellere vente
> til du selv kan hitte ud af den.
>
> Hvis du vil begrænse antallet, kan du ikke bruge den nemme
> foreach().
>
> for ($nr=0; $nr<count($a_img); ++$nr) {
> echo nogetvældigsmartmed $a_img[$nr];
> if ($nr==20) break;
> }
>
Ikke helt let forstår jeg, så det lader jeg ligge.
> Men med den løkke kan du ikke komme længere end til 20. Den kan
> laves kortere, men jeg har vist hvordan man kan 'overstyre' inde
> i en løkke.
>
>> 2. Og hvordan vendes rækkefølgen, som filerne listes i? Nu sker
>> det alfabetisk a-z, men hvis jeg nu vil lave det z-a, hvad
>> skal jeg så gøre?
>
> Hvis du kun skal bruge den modsatte rækkefølge, skal du bare
> bruge rsort() i stedet for sort().
>
Fint.
Tak for hjælpen.
v.h.
Jakob
> Hvis du først vil sortere og bagefter vende rækkefølgen, kan du
> bruge sort() og bagefter array_reverse().
>
> --
> Bertel
> http://bertel.lundhansen.dk/ http://fiduso.dk/
| |
Jesper H (05-07-2006)
| Kommentar Fra : Jesper H |
Dato : 05-07-06 15:38 |
|
Bertel Lund Hansen skrev:
> for ($nr=0; $nr<count($a_img); ++$nr) {
> echo nogetvældigsmartmed $a_img[$nr];
> if ($nr==20) break;
> }
>
> Men med den løkke kan du ikke komme længere end til 20. Den kan
> laves kortere, men jeg har vist hvordan man kan 'overstyre' inde
> i en løkke.
> --
> Bertel
> http://bertel.lundhansen.dk/ http://fiduso.dk/
Får du så ikke 21 værdier? (0, 1, 2, ..., 20)
Hvis man skulle gøre den kortere, kunne man jo evt. sige
for ($nr=0; $nr<min(count($a_img),20); ++$nr) {
echo nogetvældigsmartmed $a_img[$nr];
}
--
Mvh Jesper, http://fdf.dk/landsdel1/
| |
Bertel Lund Hansen (05-07-2006)
| Kommentar Fra : Bertel Lund Hansen |
Dato : 05-07-06 17:22 |
|
Jesper H skrev:
> Får du så ikke 21 værdier? (0, 1, 2, ..., 20)
Jo, faktisk.
> Hvis man skulle gøre den kortere
Ja, men den er ikke særlig nyttig. Derfor lavede jeg den ikke
færdig.
Det han ønsker sig, er at kunne kalde samme side med parametre
der ændrer sig for hver gang så man kan få et vilkårligt udpluk
af listen vist 20 ad gangen.
--
Bertel
http://bertel.lundhansen.dk/ http://fiduso.dk/
| |
Jakob Munck (05-07-2006)
| Kommentar Fra : Jakob Munck |
Dato : 05-07-06 18:16 |
|
> Det han ønsker sig, er at kunne kalde samme side med parametre
> der ændrer sig for hver gang så man kan få et vilkårligt udpluk
> af listen vist 20 ad gangen.
>
> --
Nej, det jeg ønsker er at kunne vise f.eks. 10 ud af de 200 filer i
galleri-mappen, på forsiden af en website, så man (på forsiden) får et lille
indblik i, hvad der er i galleriet uden at se alle filerne.
v.h.
Jakob
| |
Bertel Lund Hansen (06-07-2006)
| Kommentar Fra : Bertel Lund Hansen |
Dato : 06-07-06 08:00 |
|
Jakob Munck skrev:
> Nej, det jeg ønsker er at kunne vise f.eks. 10 ud af de 200 filer i
> galleri-mappen, på forsiden af en website, så man (på forsiden) får et lille
> indblik i, hvad der er i galleriet uden at se alle filerne.
Du kan bruge Jesper H's opskrift hvis det er okay at det er de 10
første filnavne du får fat i (ret 20 til 10).
--
Bertel
http://bertel.lundhansen.dk/ http://fiduso.dk/
| |
Jakob Munck (06-07-2006)
| Kommentar Fra : Jakob Munck |
Dato : 06-07-06 10:47 |
|
>
> Du kan bruge Jesper H's opskrift hvis det er okay at det er de 10
> første filnavne du får fat i (ret 20 til 10).
>
Du har ret. Efter at have eksperimenteret med det, er det lykkedes for mig
at få det til at virke som det skal ved at bruge den foreslåede kode. Her er
resultat:
<?php
$i=0;
$thumbs = 'img_thumb/'; //mappe til thumnails
$imgdir = 'img_store/'; // mappe til store billeder
$allowed_types = array('jpg','JPG'); // filtyper der er tilladte
$dimg = opendir($thumbs);
$image = array();
while($imgfile = readdir($dimg))
if (in_array(strtolower(substr($imgfile,-3)),$allowed_types)) $a_img[] =
$imgfile;
sort($a_img);
$i=0;
for ($nr=0; $nr<min(count($a_img),20); ++$nr) {
echo "<td align='center'><img src='$thumbs$a_img[$nr]'" ."width='120'
height='90' border='0' title='$image2'></td>\n";
//antal billeder pr. række:
$a = 2;
if (++$i % $a == 0) echo "<tr></tr>\n";
//antallet som skal vises:
if ($nr==5) break;
}
?>
Mange tak til jer begge for hjælpen. Jeg har fået lavet et super galleri
(synes jeg selv). Hvis nogle vil have koden (ud over ovenstående), er de
velkomne.
v.h.
Jakob
| |
|
|