[ simicicdusan @ 21.03.2004. 23:36 ] @
Hocu da sortiram fajlove prema vremenu zadnje promene.
Znaci trebalo bi izlistati dir i ubaciti zeljene fajlove u array.
To znam da uradim ali mi problem predstavlja sortiranje.

Kako bi izgledao najjednostavniji kod za to sortiranje?

Da li moze da se koristi usort a da se kao funkcija definise filemtime i ako moze kako?

Ili se mora listati dir i uz svaki fajl da se uzme filemtime i onda u array za keys ubaciti vrednosti filemtime-a a za values ubaciti imena fajlova i onda array sortirati po keys pa izlistati values od array?!?!

Molim vas pomozite.
[ noviKorisnik @ 22.03.2004. 07:39 ] @
Ako su ti u nizu samo nazivi fajlova, u funkciji za sortiranje se mora imati podatak o putanji. Recimo da je to globalna promenljiva $dirname:
Code:
function filecmp ($a, $b)
{
    global $dirname;
    if (filemtime ("$dirname$a") < filemtime ("$dirname$b")) return -1;
    return 1;
}

Naravno, poziv je usort ($dirarray, "filecmp");

Nekako, za bilo kakav listing direktorijuma je navika da se prikažu prvo poddirektorijumi pa tek ondak fajlovi.
Code:
function filecmp ($a, $b)
{
    global $dirname;
    if (filetype ("$dirname$a") < filetype ("$dirname$b")) return -1;
    if (filetype ("$dirname$a") > filetype ("$dirname$b")) return 1;
    if (filemtime ("$dirname$a") < filemtime ("$dirname$b")) return -1;
    return 1;
}


Evo jedan drugi primer, u nizu fajlova iz direktorijuma čuvaju se ime, ekstenzija, veličina fileta i datum, pa sad to sve da može da se sortira po bilo kojoj koloni, opadajuće ili rastuće... (odvojeni su nizovi za poddirektorijume i fajlove)
Code:
function filecmp ($a, $b)
{
    if (!isset ($_SESSION ['sortorder']))
        $_SESSION ['sortorder'] = array ('name', 'ext', 'size', 'date');

    $sortorderindex = 0;

    while ($sortorderindex < count ($_SESSION ['sortorder']))
    {
        $order = $_SESSION ['sortorder'] [$sortorderindex++];
        if (substr ($order, 0, 1) == '!')
        {
            $order = substr ($order, 1);
            $pre = 1;
            $after = -1;
        }
        else
        {
            $pre = -1;
            $after = 1;
        }
        if ($a [$order] == $b [$order]) continue;
        else return $a [$order] < $b [$order] ? $pre : $after;
    }

    return 0;
}
[ simicicdusan @ 22.03.2004. 21:16 ] @
Dobro to za razdvajanje foldera od fajlova znam i to mi sada nije potrebno jer nemam subfolders ali ovaj prvi kod ne radi izgleda da tako ne moze.
Samo bih jos dodao da se kod sortiranja po vremenu poslednje izmene mora koristiti i
Code:
clearstatcache();


Izgleda da je jedino resenje ovo kada se u array za keys ubacuje vrednost filemtime-a a za values ubacuje vrednost readdir-a pa se array sortira po keys pa se onda izlistava samo values iz array-a

Ajde da li jos neko ima neki predlog?
[ noviKorisnik @ 22.03.2004. 21:41 ] @
Ne znam iz kog razloga ne bi radio prvi kod, izuzev ako je $dirname bez kose crte. Ako je tako: filemtime ("$dirname/$a")
[ simicicdusan @ 22.03.2004. 22:56 ] @
Evo proverih ponovo i radi kod!!!

Negde sam ja pogresio a morao sam da brzopleto izletim.

Hvala na tako brzom odgovoru i izvini zbog ovoga.

p.s.

Samo da dodam da jo ovo kod koji sortira fajlove po vremenu zadnje promene ali na prvom mestu izbacuje najstarije izmenjeni fajl a ne najskorije izmenjeni fajl no to je najmanji problem.