PHP preg_find – Egy szuper könyvtárolvasó kiegészítés

Privát projekthez kellett volna egy egyszerű rutin, amivel beolvasok egy könyvtárstruktúrát, rendezem úgy, ahogy akarom, majd kipakolom listában.

Az egyszerű megoldás nekem azt jelenti, hogy vagy van gyári megoldás rá, vagy van egy minimális méretű 3rd party tool. Nem akarok sort metódusokat írni rá, ami ugyan nem bonyolult, de még mindig bonyolultabb, mint ha az egészet bepakolom két sorba.

Az alábbi képrészleten egy ötletem második fázisa látható (Youtube-ra RSS feeddel feliratkozni, hogy podcatcher is le tudja tölteni a videókat). Az első oszlopban file nevek vannak, amik megegyeznek a Youtube Userek neveivel, és amiket létrehozásuk szerint fordított sorrendben akartam kilistázni (hogy tudjam, melyiket adtam hozzá frissen).

Youtube feeds
Screenshot a proof of concept-ből

A preg_find segítségével ez három sorból megoldható:


include("preg_find.php");
$files = preg_find('/./', 'mydir', PREG_FIND_SORTMODIFIED|PREG_FIND_RETURNASSOC|PREG_FIND_SORTDESC);
$files= array_keys($files);

Az első paraméter regex a file nevére vonatkozóan (én nemes egyszerűséggel mindent listáztam), a második paraméter a könyvtár neve, a harmadikba pedig a számos opció közül bepakoljuk azt, ami kell. A PREG_FIND_SORTMODIFIED csak a PREG_FIND_RETURNASSOC -kal együtt működik, amitől viszont óriási lesz az array (minden file attribútumot bepakol), amire nekem pont nincs szükségem, ezért van ott a harmadik sor is.

Ennyi. Ha akarom rekurzív, ha nem akarom, nem az.

Ugyanakkor stackOverflow szerint a legjobb megoldás a problémámra egy ilyen kód lett volna:


if($h = opendir($dir)) {
$files = array();
while(($file = readdir($h) !== FALSE)
$files[] = stat($file);

// do the sort
usort($files, 'your_sorting_function');
}

ahol még meg kellene írnom a “your_sorting_function” részt.

via.