Trädvy Permalänk
Medlem
Plats
Piteå
Registrerad
Okt 2004

vända ordningen i php kod

Jag sitter och knopar på en kod som letar reda på alla bilder jag har i en viss mapp. Mappstrukturen ser ut ungefär såhär:

-img
--2016
---0701
---0702
---0703

and so on...

såhär ser min php kod ut atm:

<?php $directory = 'img/2016/'; $extension = '/*.JPG'; if ( file_exists($directory)) { foreach(glob($directory.'*'.$extension, GLOB_MARK) as $file) { echo "<img src='$file' style='height:30px'>"; } } else { print "Directory ${directory} doesn't exist!"; } ?>

Det fungerar som det ska men just nu visas bilderna från första mappen först och den sista mappen sist, går det ändra ordningen den söker igenom mapparna så bilderna från sista mappen hamnar först?

jag har provat lite olika array_reverse varianter men jag får inte riktigt till det...

CPU: AMD Ryzen 1700x @ 3.8GHz || Mem: 16GB Corsair LPX 3000mhz || Mobo: Asus x370 Prime || GPU: EVGA Geforce GTX1070 SC || SSD: WD black 500GB m2 || OS: Linux Mint/Win 10 || Monitor: Dell 43" 4K P4317Q

Citera om du vill ha svar :)

Trädvy Permalänk
Medlem
Plats
Karlskrona
Registrerad
Aug 2009

@pellski87: Du kan göra på flera sätt. Enklast är nog att spara ner resultaten för varje map i en array. Då har du ett antal arrayer (i förslagsvis en array) där den första är första mappen osv. Sedan ittererar du över dessa i bakvänd ordning och skriver antingen ut resultatet eller så skapar du en ny array med resultatet i rätt ordning med array_merge, där du utgår ifrån en tom array och mergar in resultatet för varje array då ittererar. Tänk på att varje array för varje map har en ordning som du kan ändra med array_reverse om det krävs också.

Asus Zenith Extreme | 32gb DDR4 3200MHZ CL14 | Threadripper 1950X | 1080Ti
Asus Z97 Pro Gamer | 32gb ram DDR3 2400MHz | i7 4790k | 2 x R9 390 - Barnen fått ta över
Asrock P67 Extreme4 rev3 | 16gb DDR3 2400MHz | i7 2600K | R9 290 - Barnen fått ta över
En massa bärbara, servrar, RPi's och andra boxar

Trädvy Permalänk
Medlem
Plats
Piteå
Registrerad
Okt 2004
Skrivet av inquam:

@pellski87: Du kan göra på flera sätt. Enklast är nog att spara ner resultaten för varje map i en array. Då har du ett antal arrayer (i förslagsvis en array) där den första är första mappen osv. Sedan ittererar du över dessa i bakvänd ordning och skriver antingen ut resultatet eller så skapar du en ny array med resultatet i rätt ordning med array_merge, där du utgår ifrån en tom array och mergar in resultatet för varje array då ittererar. Tänk på att varje array för varje map har en ordning som du kan ändra med array_reverse om det krävs också.

Tack för tipsen, dock kändes det där väldigt överkurs för mig. Jag ska försöka läsa på

CPU: AMD Ryzen 1700x @ 3.8GHz || Mem: 16GB Corsair LPX 3000mhz || Mobo: Asus x370 Prime || GPU: EVGA Geforce GTX1070 SC || SSD: WD black 500GB m2 || OS: Linux Mint/Win 10 || Monitor: Dell 43" 4K P4317Q

Citera om du vill ha svar :)

Trädvy Permalänk
Medlem
Plats
Stockholm
Registrerad
Jan 2004
Skrivet av pellski87:

Tack för tipsen, dock kändes det där väldigt överkurs för mig. Jag ska försöka läsa på

$files[] = $file; // Här lägger du till $file i arrayen $files. Denna ska ersätta innehållet i din nuvarande foreach.
Sen kör du array_reverse på $files (http://php.net/manual/en/function.array-reverse.php)
för att sen köra en foreach där du skriver ut resultatet på array_reverse och viola.

Trädvy Permalänk
Medlem
Plats
Piteå
Registrerad
Okt 2004

efter lite googlande och läsande löste det jag det på detta viset:

<?php $pics = glob("img/2016/*/*.{JPG,PNG,GIF,jpg,png,gif}", GLOB_BRACE); if(count($pics)) { rsort($pics); foreach($pics as $pictures) { echo "<img src='$pictures' style='height:30px'>"; style='width:100%'></a>"; }} else { echo "Tomt!"; } ?>

vette fan hur korrekt det är, men det funkar som jag vill iaf

CPU: AMD Ryzen 1700x @ 3.8GHz || Mem: 16GB Corsair LPX 3000mhz || Mobo: Asus x370 Prime || GPU: EVGA Geforce GTX1070 SC || SSD: WD black 500GB m2 || OS: Linux Mint/Win 10 || Monitor: Dell 43" 4K P4317Q

Citera om du vill ha svar :)