Bilder eines Verzeichnisses sortiert anzeigen

julia29

Erfahrenes Mitglied
Hallo,

möchte Bilder von einer Webcam aus dem Verzeichnis sortiert auslesen. Ohne Sortierung klappt es, mit leider nicht.

Folgende Fehlermeldung erscheint:
Parse error: syntax error, unexpected T_VARIABLE in /var/www/web119/html/s/03aktuell_01.php on line 19

19: $a['mtime']<$b['mtime'] ? +1:-1)

PHP:
<?
$pfad = '01/';
$files = array();

// Verzeichnis einlesen in $files
$dir = opendir ($pfad);
while ($file=readdir($dir))
if (ereg('\.(jpg|gif|png|jpeg)$', $file))
$files[] = array (
'name'=>$file,
'mtime'=>filemtime("$pfad/$file")
);

// $files nach mtime absteigend sortieren
// ++++++ Beginn auskommentiert
/*
function mycmp($a,$b)
{
return ($a['mtime']==$b['mtime'] ? 0
$a['mtime']<$b['mtime'] ? +1:-1)
);
}
usort ($files, 'mycmp');
*/
// ++++++ ENDE auskommentiert


// ausgeben
foreach($files as $file)
echo '<a href="'. "$pfad/$file[name]". '">'. $file['name']. '</a><br>';
?>

meine Dateiliste sieht daher derzeit noch so aus
(Bilder durcheinander vom 21. und 22.10.):

capture13-10-21@15`28`32.jpg
capture13-10-22@11`23`29.jpg
capture13-10-21@13`54`18.jpg
capture13-10-21@13`42`17.jpg
capture13-10-21@13`56`18.jpg
capture13-10-21@15`08`32.jpg
capture13-10-21@18`48`33.jpg
capture13-10-21@13`51`18.jpg
capture13-10-21@16`28`33.jpg
capture13-10-21@13`49`18.jpg
capture13-10-22@11`10`38.jpg
capture13-10-21@14`02`18.jpg

wie muss ich es richtig machen?
Julia
 
Komische Zeilen
PHP:
return ($a['mtime']==$b['mtime'] ? 0
$a['mtime']<$b['mtime'] ? +1:-1)
Da fehlt ein :Wert
Ich würde es der Übersicht zuliebe in eine if-Schleife sezuen
PHP:
if($a['mtime']==$b['mtime'])
    return 0;
}elseif($a['mtime']<$b['mtime']){
    return 1;
}else{
    return -1;
}
 
Dann kommt die Fehlermeldung:
Parse error: syntax error, unexpected '}' in /var/www/web119/html/s/03aktuell_01.php on line 27

nehme ich "}" heraus,
PHP:
}elseif($a['mtime']<$b['mtime']){
geht nichts mehr, Bildschirm ohne Fehlermeldung alles weiß.
 
Mach dir einfach das Leben leichter. Das Die Werte deines $files() sind ja selber auch wieder arrays
Du kannst also mittels array_multisort() sortieren oder gleich mit meiner Funktion...
array_sort_by_subarray_item()
PHP:
array_sort_by_subarray_item($files, 'mtime', SORT_ASC);


//Und hier die Funktion array_sort_by_subarray_item()
    /**
     * mpl      by ERB software
     * @author  stefan.erb(at)erb-software.com
     * http://wiki.yaslaw.info/dokuwiki/doku.php/phparraysortbysubarrayitem
     * @since   PHP 5.2
     * Sortiert einen 2-Dimensionalen Array nach einem Key in der 2ten Dimension
     * @param $array        Array der sortiert wird
     * @param $key          Key im Array der sortiert werden soll (key oder index)
     * @param $direction    Sortierrichtung. SORT_ASC oder SORT_DESC
     * @param $sort_flags   SORT_REGULAR, SORT_STRING, SORT_NUMERIC. Siehe sort_flags-Parameter von sort()
     */
    function array_sort_by_subarray_item(&$array, $key, $direction = SORT_ASC, $sort_flags = SORT_REGULAR){
    	$sort = array();
    	foreach($array as $index => $item){
    		$sort[$index] = strtoupper($item[$key]);
    	}    
    	return array_multisort($sort, $direction, $sort_flags, $array);    
    }
 
Klappt leider auch nicht, keine Fehlermeldung mehr aber weiterhin unsortiert.

Habe jetzt eine andere Überlegung. Wenn ich nach Dateinamen von heute (capture13-10-22)
und der Stundenangabe von 11`also 11 Uhr suche,
da kommen dann max. 6 Dateinamen pro Stunde und die müssen nicht sortiert sein. Die nicht funktionierende Sortierung wird dann bei 6 Dateinamen nicht mehr so wichtig.

Auszug aus Dateiliste:
capture13-10-22@11`04`35.jpg
capture13-10-21@18`18`33.jpg
capture13-10-21@13`41`17.jpg
capture13-10-21@14`38`17.jpg
capture13-10-22@11`22`29.jpg
capture13-10-21@13`57`18.jpg

Wie müßte ich die Suchabfrage mit Filter für den 22. alle mit 11 Uhr schreiben?
Also [Platzhalter]-22@11 * oder so?
 
So, ich habe mal das ganze getestet. (habe die while-Schleife noch anständig unformatiert)
Ausser einer Warnung, dass ereg nicht mehr benutzt werden soll, funktioniert es perfekt.

Warum arbeitest du nicht gleich mitscandir()?

Das folgende funktioniert bei mir einwandfrei. Ich gebe den Array extra auch vor dem Sortieren aus, um zu sehen ob dort schon Daten vorhanden sind.

PHP:
$pfad = '../kaiser/images';
$files = array();
foreach(scandir($pfad) as $file){
    if(preg_match("/\.(jpg|gif|png|jpeg)$/i", $file) == 1){
        $files[] = array ('name'=>$file, 'mtime'=>filemtime("{$pfad}/{$file}"));    
    }    
}
// unsortiert ausgeben
var_dump($files);

array_sort_by_subarray_item($files, 'mtime', SORT_ASC);

// sortiert ausgeben
var_dump($files);

//Und hier die Funktion array_sort_by_subarray_item()
/**
 * mpl      by ERB software
 * @author  stefan.erb(at)erb-software.com
 * http://wiki.yaslaw.info/dokuwiki/doku.php/phparraysortbysubarrayitem
 * @since   PHP 5.2
 * Sortiert einen 2-Dimensionalen Array nach einem Key in der 2ten Dimension
 * @param $array        Array der sortiert wird
 * @param $key          Key im Array der sortiert werden soll (key oder index)
 * @param $direction    Sortierrichtung. SORT_ASC oder SORT_DESC
 * @param $sort_flags   SORT_REGULAR, SORT_STRING, SORT_NUMERIC. Siehe sort_flags-Parameter von sort()
 */
function array_sort_by_subarray_item(&$array, $key, $direction = SORT_ASC, $sort_flags = SORT_REGULAR){
    $sort = array();
    foreach($array as $index => $item){
        $sort[$index] = strtoupper($item[$key]);
    }
    return array_multisort($sort, $direction, $sort_flags, $array);
}
 
Zurück