Hallo Community,
das folgende PHP-Script sortiert Dateinamen aus einem Ordner nach dem von mir bestimmten Angabe.
Die Dateinamen haben folgendes Schema: XXXXX_JJJJ_MM.png
XXXXX = fünf Großbuchstaben
JJJJ = Jahr (vierstellig)
MM = Monat (zweistellig)
Beispiel: ABCDE_2018_07.png
In diesem Ordner kommt jeden Monat eine neue Datei. Die Dateien reichen im Augenblick bis 2010_10 zurück.
Das Script:
<?php
$dir = "Pfad/zu_den/Bildern";
if (is_dir($dir)) {
if ($dh = opendir($dir)) {
while (($filename2 = readdir($dh)) !== false) {
if($filename2 != "." && $filename2 != ".." ) $files2[] = $filename2;
}
$aktuell=str_replace(' ','',date("m Y"));
$vergangen=str_replace(' ','',date("m Y", strtotime("-1 month -0 year")));
$oldyear=str_replace(' ','',date("Y", strtotime("-2 year")));
$oldmonth=str_replace(' ','',date("m", strtotime("-2 month")));
$aktuelljahr=str_replace(' ','',date("Y"));
$letztesjahr=str_replace(' ','',date("Y", strtotime("-1 year")));
foreach ($files2 as $con1) {
$in[] = array(
'rest_1' => substr ( $con1, 6, 4 ),
'pre_1' => substr ( $con1, 11, 2 ),
'test_1' => $con1
);
}
foreach($in as $key => $row)
{
$array_rest_1[$key] = $row['rest_1'];
$array_pre_1[$key] = $row['pre_1'];
}
array_multisort($array_rest_1,SORT_DESC,$array_pre_1,SORT_DESC,$in);
$out = array();
reset($in);
while(list($key, $val) = each($in)){
$out[] = $val['test_1'];
#echo $val['test_1'] . "<br />"; // Gibt alle Dateinamen sortiert (JJJJ - MM) aus
// Gibt nur Dateinamen mit 2018 (aktuelljahr) aus
//if ($val['rest_1'] == $aktuelljahr)
//echo $val['test_1'] . "<br />";
// Ende Ausgabe (aktuelljahr)
// Gibt nur Dateinamen mit 2017 (letztesjahr) aus
//if ($val['rest_1'] == $letztesjahr)
//echo $val['test_1'] . "<br />";
// Ende Ausgabe (letztesjahr)
// Gibt nur Dateinamen mit 2017 (letztesjahr) und 2016 (oldyear) aus
if ($val['rest_1'] == $letztesjahr)
echo $val['test_1'] . "<br />";
if ($val['rest_1'] == $oldyear)
echo $val['test_1'] . "<br />";
// Ende Ausgabe (letztesjahr) und (oldyear)
}
echo "<br />";
echo count ($out) . "<br />";
echo "<br>";
echo $aktuell . "<br />";
echo $vergangen . "<br />";
echo $aktuelljahr . "<br />";
echo $letztesjahr . "<br />";
echo $oldyear . "<br />";
echo "<br>";
closedir($dh);
}
}
?>
Die Ausgaben Funkpioniern einzeln, wenn ich die nicht benötigten auskommentiere.
Ich möchte eine Ausgabe des sortierten Array ($out) nach folgendem Schema erreichen:
Den Dateinamen des Aktuellen Monats (im Moment XXXXX_2018_08.png)
Zwei leer Zeilen (br)
Die restlichen Dateinamen des aktuellen Jahres (im Moment 2018)
Zwei leer Zeilen (br)
Alle Dateinamen des letzten Jahres (im Moment 2017) = Aktuelles Jahr -1
Zwei leer Zeilen (br)
Alle Dateinamen des vor letzten Jahr = Aktuelles Jahr -2
Zwei leer Zeilen (br)
usw. bis zum ältesten Jahr in Array (im Moment 2010)
Wie mache ich das am einfachsten, ohne viele komplizierte Schleifen-Konstrukte ?
Das Ausgabe Schema soll natürlich erhalten bleiben wenn noch Dateien aus dem Jahre 2009 oder früher hin zu kommen, und wenn im nächstes Jahr (2019) das aktuelle ist.
Ich hoffe ich habe mich verständlich ausgedrückt.
Über eine Antwort und ausführliche Erklärung würde ich mich freuen, da ich noch nicht lange mit PHP scripte.
Vielen Dank
Andreas