myGully.com

myGully.com (https://mygully.com/index.php)
-   Entwicklung & Programmierung (https://mygully.com/forumdisplay.php?f=72)
-   -   Problem mit Sortiereihenfolge in Script (https://mygully.com/showthread.php?t=2811379)

Gamebeast1989 20.01.13 17:52

Problem mit Sortiereihenfolge in Script
 
Hallo Zusammen

ich hoffe Ihr könnt mir weiter helfen.
Ich habe ein S*****, welches mir meine Verzeichnisse nach bestimmten Dateien durchsucht.
Nun lasse ich diese Dateien nach der Aktualität sortieren.

Problem: Das S***** sortiert von A-Z und ich möchte gern von Z-A sortiert haben (mit dem Datum natürlich).
Sprich das Aktuellste oben stehen haben.
Als Zusatz hätte ich gerne, dass mir nur die Aktuellsten Dateien der letzten 30 Tage anzeigt.

Hier mein S*****:
PHP-Code:

<?php

class FileExtensionFilterIterator extends FilterIterator
{
    protected 
$whitelist;

    public function 
__construct(Iterator $iterator, array $whitelist)
    {
        
parent::__construct($iterator);
        
$this->whitelist $whitelist;
    }

    public function 
accept()
    {
        
$fileInfo parent::current();

        
// Nur Dateien
        
if (!$fileInfo->isFile()) {
            return 
false;
        }

        
// Nur mit Endung aus $whitelist
        
$pi pathinfo($fileInfo->getFilename());
        if (!
in_array(strtolower($pi['extension']), $this->whitelist)) {
            return 
false;
        }

        return 
true;
    }
     
    
}



$path      'K:\FTP\VIDEO';
$whitelist = array('avi''mkv''flv'); // Aufzulistende Dateiendungen

$iterator = new FileExtensionFilterIterator(
                new 
RecursiveIteratorIterator(
                    new 
RecursiveDirectoryIterator($path)),
                
$whitelist);
                

$data = new ArrayObject();
// erstellen eines ArrayObjects mit den SplFileInfo-Objekten
foreach($iterator as $value)
{
    
$data[$value->getmtime()] = $iterator->getFileInfo();
}

// sortieren
$data->ksort();


// ausgeben
foreach($data as $key=> $value)
{
    echo  
$value->getFilename() . '<br/>' ' Aktualisiert: ' date ("d.m.Y H:i:s."$value->getmtime()) .' <br />';
}

?>


GigagamOr 21.01.13 07:54

Um von Z nach A, sprich umgekehrt, zu sortieren versuch mal krsort() statt ksort().

Für die letzten 30 Tage:
PHP-Code:

foreach($data as $key=> $value)
{
    if(
$value->getmtime() >= strtotime ('-30 day')){
        echo  
$value->getFilename() . '<br/>' ' Aktualisiert: ' date ("d.m.Y H:i:s."$value->getmtime()) .' <br />';
    }


Ich hoffe das ist das was du gemeint hast.

Gamebeast1989 25.01.13 19:49

krsort() geht leider nicht... es kommt dann:

Fatal error: Call to undefined method ArrayObject::krsort() in C:\xampp\htdocs\lol.php on line 53

Gamebeast1989 25.01.13 19:53

okay... habs geändert... anstatt :

$data = new ArrayObject();

habe ich

$data = Array();

genommen und dann krsort($data).

Funktioniert nun super...

Jetzt habe ich nur das Problem, dass ich dieses s***** nutzen möchte aber NUR den letzten Ordner ausgeben möchte ABER nach den gleichen Suchkreterien... Ist dies möglich?
Habe ein paar Ansätze versucht, bekomme jedoch nur Fehlermeldugen... Ich wüsste nicht, wo ich ansetzen kann. Mit dem S***** suche ich ja nur nach Dateien :(

GigagamOr 26.01.13 16:36

Hab ich das richtig verstanden, du willst den aktuellsten Ordner ausgeben? Heißt den Inhalt des Ordners oder den Namen des Ordners?

Gamebeast1989 26.01.13 17:22

Also eigentlich möchte ich gerne die jeweiligen Ordnernamen ausgeben, in den die gefilterten Dateien drin sind. Und nicht die gefilterten Dateien an sich....

Eine andere (ggf. sogar bessere) Alternative wäre, dass ich nach Ordnern suche, die innerhalb der letzten 30 Tage aktualisiert worden sind. Mit Ausschluss bestimmter namen im Ordnernamen (wie z.B. sample).

GigagamOr 26.01.13 20:37

Also um statt den Namen der Datei den des Ordners auszugeben verwende statt echo $value->getFilename()
PHP-Code:

echo basename(dirname('K:\FTP\VIDEO'), $value->getFilename()); 

Ich habe es nicht getestet, aber so, oder so ähnlich, müsste es funktionieren.

Gamebeast1989 27.01.13 14:06

Funktioniert leider nicht, es wird nur der Ordnername : FTP ausgegeben...


Alle Zeitangaben in WEZ +1. Es ist jetzt 20:31 Uhr.

Powered by vBulletin® (Deutsch)
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.