nach Datum sortieren - eigene Sortierung

damug

Mitglied
Hallo,
ich suche schon 2 Tage das ganze Netz nach einem Ansatz wie ich die Bilder meiner Gallerien, der Dateiname entspricht dem Erstellungsdatum, nach Datum (dd.mm.yyyy.) sortiert bekomme.
Die sort funktionen hab ich schon habe ich bis auf usort und multi alle durch ohne das gewünschte Ergebniss.

Meine Anätze waren dann noch:

$bilder = $pfad;
$ddmmyyyy = explode(".",$bilder); */Dateinamen in $bilder sind durch "." getrennt/*

jetzt würde ich gerne $ddmmyyyy erst nach yyyy(Jahren-$ddmmyyyy[2]), dann nach mm(Monaten-ddmmyyyy[1]) und zuletzt nach dd(Tagen-$ddmmyyyy[0]) sortieren lassen

hier weiß ich überhaupt nicht wie ich das weiter angehen soll...


Und dann noch das über eine for Schleife zu machen:

$array1 = $bilder
sort ($array1);
for ($i=0; $i<15; $i++) echo "$array1[$i] ";

Doch das will auch nicht so richtig.


Das ganze soll zu allem Übel auch natürlich noch in mein gallerie-script eingebaut werden.
An stelle des sort($files) dachte ich.


Das Script:
PHP:
<?php

function get_files($path, $opt = "", $pathadd = "") {
     $return = array();
     foreach(get_path_content($path) as $p) if(is_file("$path/$p")) $return[ ] = $p;
     return $return;
}



function get_dirs($path) 
{
     $return = array();
     foreach(get_path_content($path) as $p) if(is_dir("$path/$p")) $return[ ] = $p;
     return $return;
}


function get_path_content($path) 
{
     $verzeichnishandle = @opendir("$path");
     rewinddir($verzeichnishandle);
     $files = array();
     while ($file = readdir($verzeichnishandle)) {
          if($file != "." and $file != "..") array_push($files, "$file");
     }

	 sort ($files);
     return $files;
}


function create_thumb($imagefile, $width, $height) {
     if(file_exists("./bilder/samuel/thumbs/" . $imagefile)) return false;
     $Img = imageCreateFromJPEG("./bilder/samuel/" . $imagefile);
     $oBreite = imageSX($Img);
     $oHöhe = imageSY($Img);
     $nBreite = $oBreite / 8;
     $nHöhe = $oHöhe / 8;


     $nBreite = floor($nBreite);
     $nHöhe = floor($nHöhe);
     $Out = imageCreateTrueColor($nBreite, $nHöhe);
     imageCopyResampled($Out, $Img, 0, 0, 0, 0, $nBreite, $nHöhe, $oBreite, $oHöhe);
     imageJPEG($Out, "./bilder/samuel/thumbs/" . $imagefile);
     return true;
}

if(isset($_GET['pic']))

          {

            $filename = $_GET['pic'];

            $handle = opendir('./bilder/samuel/');

            while (false !== ($file = readdir($handle)))

               {
                   if ($file != "." && $file != ".." && is_file("./bilder/samuel/".$file))
                   $bilder[] = $file;
               }

            sort ($bilder);

            closedir($handle);


            $bilderanzahl = count($bilder);
            $bildnr = ""; //Hier soll später die Richtige Bildnummer stehen

            for($i = 0;$i < $bilderanzahl; $i++)

               {
                   if($_GET['pic'] == $bilder[$i])

                      {
                           $bildnr = $i + 1;
                           break;
                      }

               }
			if (isset($_GET['lang']))  {
				echo "<a href=\"?lang=de&amp;page=samuel\">";}
			
			else  {
				echo "<a href=\"?page=samuel\">";}
				
            echo "<img class=\"foto_big\" src=\"./bilder/samuel/$filename\" style=\"border: 0px solid\" alt=\"Thumbnail\"/>";
            echo "</a>";



          }




else    {

			$anzahl = count("./bilder/samuel/");

			for($i = 0;$i < $anzahl; $i++) 
			{

            foreach(get_files("./bilder/samuel/")as $filename)

			
             	{
					
               		create_thumb($filename, 100, 75);

               		echo "<div style=\"font-size: 75%\" class=\"thdiv\">";
					
					if (isset($_GET['lang']))  {						
               		echo "<a href=\"?lang=de&amp;page=samuel&amp;pic=$filename\" class= \"link-pic\">";}
					
					
					else {
               		echo "<a href=\"?page=samuel&amp;pic=$filename\" class= \"link-pic\">";}					
					
               		echo "<img src=\"./bilder/samuel/thumbs/$filename\" class=\"bild\" alt=\"Foto Big\"/>";
               		echo "<br/>";
               		echo "$filename";
               		echo "</a>";
               		echo "</div>";

            	 }
			}
		}

?>


Ich weiß nicht ob ich überhaupt mit meinen Überlegungen annähernd in die richtige Richtung gehe.
Vielen Dank für jeden Tip und Hilfe.
 
Wenn ich das jetzt richtig verstanden habe, müsste es doch so funktionieren:

PHP:
<?
$a = "09.04.2009";
$b = "20.01.2009";
$c = "05.03.2009";
$d = "01.01.2008";

$arr[] = strtotime($a);
$arr[] = strtotime($b);
$arr[] = strtotime($c);
$arr[] = strtotime($d);

sort($arr);

echo date("d.m.Y", $arr[0])."<br>";

echo date("d.m.Y", $arr[1])."<br>";

echo date("d.m.Y", $arr[2])."<br>";

echo date("d.m.Y", $arr[3])."<br>";
?>

Dann erhalte ich als Ausgabe:

01.01.2008
20.01.2009
05.03.2009
09.04.2009

Gruß Thomas
 
Wo, danke für die schnellen Hilfsversuche!

Ich habe ja alle Bilder/Dateien, die als Dateinamen das Datum haben bereits in einem Array "$files".


@tombe

Da dies unbestimmt viele Dateien seien können müsste ich jede einzelne, wie ich dein Beispiel verstehe, automatisch in ein eigenes array einlesen lassen.
Das wäre das erste, ein kleiners Problem.

Und dann noch für jedes eine einzelne Ausgabe "$arr[1-100]" schreiben.

Verstehe ich das richtig? Find ich sehr kompliziert.

@kuddeldaddeldu

usort() hab ich nicht probiert weil ich absolut keine Ahnung habe wie ich das bei mir, oder besser, in überhaupt irgend einer Weise anwenden kann :(
 
usort($array, $func) - wie im Link von kuddeldaddeldu nochmal beschrieben:
http://de.php.net/usort hat gesagt.:
Die Vergleichsfunktion muss einen Integerwert kleiner als, gleich oder größer als 0 zurückgeben je nachdem ob das erste übergebene Argument kleiner als, gleich oder größer als das zweite ist.

Und dazu ebenfalls das erste Beispiel auf der Seite:
PHP:
function cmp($a, $b)
{
    if ($a == $b) {
        return 0;
    }
    return ($a < $b) ? -1 : 1;
}

$a = array(3, 2, 5, 6, 1);

usort($a, "cmp");

foreach ($a as $key => $value) {
    echo "$key: $value\n";
}

Du musst nur eine Funktion schreiben (am besten selbst und dann die fertige hier zeigen), die zwei Zeiten miteinander vergleicht (gute Ansätze hat "tomb" geleifert) und eine Zahl kleiner / gleich 0 ausgibt wenn das erste Argument kleiner ist oder größer 0 wenn das erste Argument größer ist.
Tip: Zeitstempel voneinander abziehen.
Hinweis: Es werden immer nur zwei Argumente an deine Funktion von PHP übergeben.
 
Zuletzt bearbeitet:
Da müsste ja die Funktion sein, in der Du die Dateinamen in das Array einliest. Hier wird der Dateiname dann automatisch umgewandelt:

PHP:
function get_path_content($path) {

$verzeichnishandle = @opendir("$path");
rewinddir($verzeichnishandle);
$files = array();

while ($file = readdir($verzeichnishandle)) {
// Hier gleich in numerischen Zeitwert umwandeln
if($file != "." and $file != "..") array_push($files, strtotime($file));
}

sort ($files);
return $files;

}

Und später machst Du die Ausgabe in einer Schleife:

PHP:
For ($a = 0; $a < count($files); $a++) {
echo date("d.m.Y", $files[$a])."<br>"; 
}
 
Danke, ich hab jetzt zumindest was zusammengebastelt was funktioniert.

Nur leider noch nicht genau verstanden :-(.

PHP:
	function datum($a, $b) 
	{
		$a_datum = explode('.', $a);
		$b_datum = explode('.', $b);
		return mktime(0,0,0,$a_datum[1],(int)$a_datum[0],$a_datum[2]) <= mktime(0,0,0,$b_datum[1],(int)$b_datum[0],$b_datum[2]);
	}

	usort($files, 'datum');

Das (int) habe ich durch googln nach folgender Fehlermeldung gefunden:

mktime() expects parameter 5 to be long


Was ich überhaupt nicht verstehe:

$a & $b sind doch überhaupt nicht definiert?!

Durch "$a_datum = explode('.', $a);" sag ich doch nur was mit $a angestellt werden soll. Aber was genau wird hier "explodiert" wenn $a durch fehlende Definierung meiner Meinung nichts beinhaltet.


Vielen Dank nochmals für eure Hilfe bis hier, ich würds aber auch gerne 100% verstehen.
Dazu überlege ich mir auch ein Buch anzuschaffen, weiß aber bei soviel Angebot nicht was für mich empfehlenswert wäre?

Lese auch gerne Tips hier zu.


THX
 
Uiuiui. Da fehlt wohl ein Tutorial oder ein Buch zu PHP (mindestens ein Link unbedingt lesen).
$a und $b werden definiert, da sie als Argumente übergeben worden sind:
PHP:
function addiere($a, $b)
{
  return $a + $b;
}
echo addiere(4, 5);
Ausgabe:
Code:
9
 
Ok, dank dir für die Links.

Werde ich mir auf jeden Fall beide gut durchlesen.
Und wie schon gesagt überlege ich schon die Anschaffung eines Buchs nur welches für mich am geeignetsten wäre weiß ich noch nicht.

Dein Beispiel fin dich schonmal super Verständlich, das hab ich kappiert.
Ein Buch das sehr verständlich ist, gut erklärt, hätte ich gern.
 
Zurück