Eerste bestand uit een folder halen en folders overslaan

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Snelle Jaap

Snelle Jaap

09/10/2019 12:38:19
Quote Anchor link
Ik wil in een lijst van folders van elke folder de eerste afbeelding tonen. Het probleem is dat sommige folders geen afbeelding hebben als 1e bestand maar nog een folder.

Mijn arrays zien er nu zo uit:

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
Array
(
    [0] => .
    [1] => ..
    [2] => 20151113_152308.jpg
    [3] => 20160524_173033.jpg
    [4] => 20160810_100405.jpg
    [5] => 20160816_142932.jpg
    [6] => 20160817_135507.jpg
    [7] => 20170203_145901.jpg
    [8] => 20170203_151235.jpg
    [9] => Afbeelding-ifone-131.jpg
    [10] => Afbeelding-ifone-508.jpg
    [11] => Bestratingswerkzaamheden
    [12] => Mvc-161.jpg
    [13] => Rioleringswerkzaamheden
    [14] => SANY0016.jpg
    [15] => SANY0036.jpg
    [16] => SANY0060.jpg
    [17] => SANY0132.jpg
    [18] => SANY0133.jpg
    [19] => SANY0158.jpg
    [20] => SANY0159.jpg
    [21] => SANY0361.jpg
    [22] => Zeefwerkzaamheden
)
Array
(
    [0] => .
    [1] => ..
    [2] => Acceptatie afvalstoffen - bouwstoffen
    [3] => Afzet afvalstoffen - bouwstoffen
    [4] => Gronddepot,-kraan.jpg
    [5] => IMG_2596.jpg
    [6] => IMG_5258.jpg
    [7] => PA100991.jpg
    [8] => PA131006.jpg
    [9] => PA131009.jpg
    [10] => PA131015.jpg
    [11] => PA161034.jpg
    [12] => SANY0050.jpg
    [13] => Transport afvalstoffen - bouwstoffen
)
Array
(
    [0] => .
    [1] => ..
    [2] => Asbest inventarisatie
    [3] => Asfaltonderzoek
    [4] => Bodemonderzoek
    [5] => SANY0123.jpg
    [6] => SANY0695.jpg
    [7] => Saneringsontwerp
    [8] => Saneringsvarianten
)
Array
(
    [0] => .
    [1] => ..
    [2] => Asbestsanering
    [3] => Calamiteitensaneringen
    [4] => Grond sanering
    [5] => Sanering asbest in bodem
    [6] => Tank_sanering
    [7] => Vervoer bouwstoffen - afvalstoffen
)
Array
(
    [0] => .
    [1] => ..
    [2] => Aanleg vloeistofdichte voorzieningen
    [3] => Controle vloeistofdichte voorzieningen
    [4] => Herstel vloeistofdichte voorzieningen
    [5] => Oppervlakte reiniging
)


Alleen de 1e array heeft een afbeelding als 1e bestand. Ik wil bij de rest de folders overslaan en alleen maar een afbeelding tonen (als die er is). Hoe kan ik dat doen?

Dit is nu mijn loop:

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
<?PHP
foreach($directories as $image){
    $firstfile = scandir($pad.'/'.$image);
    echo $firstfile[2];
}

?>


Dat laat alleen bij de 1e een afbeelding zien en bij de rest folders.
Gewijzigd op 09/10/2019 12:39:09 door Snelle Jaap
 
PHP hulp

PHP hulp

11/12/2019 14:38:52
 
Rob Doemaarwat

Rob Doemaarwat

09/10/2019 14:05:02
Quote Anchor link
Blijkbaar ga je er nu al vanuit dat de eerste 2 entries altijd een directory zijn ("." en ".."), da's ook niet helemaal zuiver. Gewoon er doorheen lo(o)pen, en na de eerste is_file() break-en.
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
<?php
foreach($directories as $image){
    $files = scandir($pad.'/'.$image);
    foreach($files as $file) if(is_file($pad . '/' . $file)){
      echo $file;
      break;
    }
}

?>
 
Snelle Jaap

Snelle Jaap

09/10/2019 16:01:43
Quote Anchor link
Rob Doemaarwat op 09/10/2019 14:05:02:
Blijkbaar ga je er nu al vanuit dat de eerste 2 entries altijd een directory zijn ("." en ".."), da's ook niet helemaal zuiver. Gewoon er doorheen lo(o)pen, en na de eerste is_file() break-en.
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
<?php
foreach($directories as $image){
    $files = scandir($pad.'/'.$image);
    foreach($files as $file) if(is_file($pad . '/' . $file)){
      echo $file;
      break;
    }
}

?>

Bovenstaande toonde niets, ik heb nu de punten uit de array gefilterd en het iets anders opgeschreven:

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
foreach($directories as $image){
    $files = array_diff(scandir($pad.$image), array('.', '..', 'index.html'));

    foreach($files as $file){
        if(!is_dir($file)){
            echo $file.'<br>';
            break;
        }
    }
}

Maar dit geeft me nog steeds folders, hoe kan dat als ik erop check of het geen folder is?

Dit is het resultaat wat ik krijg:

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
20151113_152308.jpg
Acceptatie afvalstoffen - bouwstoffen
Asbest inventarisatie
Asbestsanering
Aanleg vloeistofdichte voorzieningen
 
- Ariën -
Beheerder

- Ariën -

09/10/2019 16:06:53
Quote Anchor link
Volgens mij zou Rob's methode moeten werken, maar ik heb het idee dat het met de accolades niet lekker loopt?

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
<?php
foreach($directories as $image){
    $files = scandir($pad.'/'.$image);
    foreach($files as $file) {
    if(is_file($pad . '/' . $file)){
        echo $file;
        break;
    }
    }
}

?>
Gewijzigd op 09/10/2019 16:07:32 door - Ariën -
 
Verwijderd 31683

Verwijderd 31683

09/10/2019 16:10:23
Quote Anchor link
En moet je ook niet de recursie in indien mappen genest zijn? Mogelijk wil je van diepere directories ook een eerste afbeelding?
 
Snelle Jaap

Snelle Jaap

09/10/2019 16:12:40
Quote Anchor link
Bovenstaand laat ook niks zien helaas.

Thomas van den Heuvel op 09/10/2019 16:10:23:
En moet je ook niet de recursie in indien mappen genest zijn? Mogelijk wil je van diepere directories ook een eerste afbeelding?


Ja lang verhaal maar dat werkt al, de submappen komen op een andere pagina en gaan altijd maar 1 niveau diep dus daar is de eerste waarde in de array sowieso altijd een file. Deze pagina staat er los van en toont alleen de hoofdmappen.
Gewijzigd op 09/10/2019 16:14:10 door Snelle Jaap
 
Rob Doemaarwat

Rob Doemaarwat

09/10/2019 17:16:29
Quote Anchor link
O, wacht, die $image is natuurlijk de naam van de sub-dir, dus die moet ook in het pad van je is_file():
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
13
<?php
foreach($directories as $image){
    $files = scandir($pad.'/'.$image);
    foreach($files as $file){
//onderstaande evt. gebruiken voor testen/debuggen
//      print($pad . '/' . $image . '/' . $file . "\n");

      if(is_file($pad . '/' . $image . '/' . $file)){
        echo $file;
        break;
      }
    }
}

?>

@Ariën: De accolades klopten wel, maar ik ben er een beetje "allergisch" voor. Ik zou bovenstaande dus gewoon schrijven als:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
<?php
foreach($directories as $image) foreach(scandir($pad.'/'.$image) as $file) if(is_file($pad . '/' . $image . '/' . $file)){
  echo $file;
  break;
}

?>

Ik weet het, hier is niet iedereen gecharmeerd van, maar ik type altijd maar gewoon door tot ik echt een accolade nodig heb (ivm multi-line statement daarna).
 
Verwijderd 31683

Verwijderd 31683

09/10/2019 17:41:06
Quote Anchor link
Het "probleem" daarbij is wel dat elke keer dat je (of anderen) daarmee geconfronteerd wordt je geneigd bent om hier dan over na te denken of ze bewust zijn weggelaten of toch per ongeluk zijn vergeten. Als je gewoon overal consequent accolades gebruikt hoef je dat niet te doen. Minder is niet per definitie beter :). Leesbaarheid is ook een ding.
 
Michael -

Michael -

09/10/2019 19:20:32
Quote Anchor link
Waarom zoek je dan niet alleen maar afbeeldingen? En dan pak je gewoon steeds de eerste?
Glob

of dit Scan folder for folders, and get first image of folder
Gewijzigd op 09/10/2019 19:23:00 door Michael -
 
Snelle Jaap

Snelle Jaap

10/10/2019 10:40:44
Quote Anchor link
Thanks ik heb het voor elkaar gekregen met bovenstaande hulp.
 



Overzicht Reageren

 
 

Om de gebruiksvriendelijkheid van onze website en diensten te optimaliseren maken wij gebruik van cookies. Deze cookies gebruiken wij voor functionaliteiten, analytische gegevens en marketing doeleinden. U vindt meer informatie in onze privacy statement.