# sortieren nach datum



## nox (22. April 2002)

hy @all

hab folgendes problem

versuche daten in einem ordner zu erfassen und nach datum zu sortieren.
die daten werden erfolgreich erfasst.
weiss aber nicht wie sortieren (nach datum!)!

pleace help meee


----------



## Major (22. April 2002)

Du musst das mal genauer erklären, damit wir Dir helfen können.
Was sind das für Daten, was ist das für ein Ordner usw.

Cu Major


----------



## nox (22. April 2002)

daten in einem ordner werden erfasst (.txt)
und nach datum sortiert
nur weiss ich nicht wie man die daten nach datum sortiert kann 

```
$hdl=opendir ("txtdb/aktuell");
while ($res = readdir ($hdl))
{
	$check_file=is_file($res);
	if ($check_file!="true")
		{
		echo "$res<br>";
		}
}
   closedir($hdl);
```


----------



## Major (22. April 2002)

???
Du willst also die Dateien auslesen und die nach Datum ordnen???
Weil Daten != Dateien !!!

das letzte Änderungsdatum bekommst Du dann so:
$s = stat($res); 
$lastmod = $s[10];

jetzt kannst Du Dir eine Funktion schreiben die nach Daten ordnet.

z.B. $lastmod in timstamp umwandeln, dann sortieren

Cu Major


----------



## nox (22. April 2002)

:>
uups da komm ich nich mit!
habe keine ahnung wenns ums sortieren von daten geht


----------



## Nitromaus (22. April 2002)

Nach was willst du es denn genau ordnen nach ErstellungsDatum , Datum Wann es zuletzt geändert wurde, oder was willst du denn genau wissen?


----------



## nox (22. April 2002)

ich möchte die dateien nach erstellungsdatum sortieren


----------



## Nitromaus (22. April 2002)

also der code um das erstellungsdatum auszulesen ist dieser:


```
filectime("filename")
```

Lies alle Datein am besten in ein Array aus, und sortiere sie anhand einer foreach_Schleife und dem timestamp nach der Zeit.

Ich hoffe ich habe das Problem richtig verstanden


----------



## nox (22. April 2002)

was ne for - schleife is weis ich aber ne foreach?
und was ist timestamp?


----------



## Major (22. April 2002)

Timestamp: http://www.schattenbaum.net/php/datum.php

foreach: http://www.php.net/manual/en/control-structures.foreach.php

Cu Major


----------



## nox (22. April 2002)

habe absolut keine ahnung wie das funktioniert!

am besten ich poste mal den sourcecode:


```
<?PHP
$verz = dir("txtdb/aktuell/");

$txt = array();

while($entry=$verz->read())
{
	$txt[] = "txtdb/aktuell/".$entry;
}
array_shift($txt);  //pfad punkt wird gelöscht aus array (.) -> i.o.
array_shift($txt);  //verzeichnis punkte werden gelöscht aus array (..) -> i.o.

//Table beginn -> i.o.
echo "<table width='100%' border='0'>";
echo "<tr><td width='5%'></td>";
echo "<td width='625' height='15'><h1>News:</h1></td>";
echo "<td width='5%'></td></tr>";


//Ordnerinhalt in tabelle eingefügt -> i.o.
for($y=0;$y<count($txt);$y++)
{
	//Dateiname, für ausgabe als titel -> i.o.
	$map = $txt[$y]; 

	$maplink =  $map;
	$fp = fopen($maplink,"r");

	if ($fp)
		{
			
			//Tabellenfelder -> i.o.
			echo "<tr><td width='5%'></td><td width='625'>";
			echo "<fieldset><legend>" .$map. "</legend><p>";
			
	
			while (!feof($fp))
			{
				$zeile = fgets($fp, 1000);
				echo "$zeile";
			}
		
		echo "</td><td width='5%'></td></tr><tr><td width='5%'>";
		echo "</td><td width='625' height='15'></td><td width='5%'></td></tr>";
		

		fclose($fp);
		}

	else
	{
		echo "Datei: " .$map. " nicht gefunden";
	}
}
$verz->close();


//Table end -> i.o.
echo "</table>";
?>
```

alles läuft einwandfrei!

so wie es jetzt geschrieben ist werden die dateien nach alphabet geordnet.
ich möchte aber, dass die daten nach datum sortiert werden(filemtime)

hoffe es so kommen wir weiter


----------



## Nitromaus (22. April 2002)

Also ich hab jetzt ein bisschen rumprobiert, hab es fast geschafft, hatte aber keinen Bock mehr weiterzumachen, also, es wird jetzt von jeder datei, das erstellungsdatum ausgegeben und dies in der richtigen reihenfolge, nun wird es wohl nicht mehr so schwer sein den Rest zu machen. 


```
PHP:--------------------------------------------------------------------------------

<?PHP
$verz2 = "/Eigene Dateien/php/NitroFlashBoard/";
$verz = dir($verz2);



while($entry=$verz->read())
{
    $txt[] = "$verz2".$entry;
}
array_shift($txt);  //pfad punkt wird gelöscht aus array (.) -> i.o.
array_shift($txt);  //verzeichnis punkte werden gelöscht aus array (..) -> i.o.

//Table beginn -> i.o.
echo "<table width='100%' border='0'>";
echo "<tr><td width='5%'></td>";
echo "<td width='625' height='15'><h1>News:</h1></td>";
echo "<td width='5%'></td></tr>";


 foreach($txt as $elem){
        
        $datum[]= filectime($elem);
        
        }
       arsort($datum);
         foreach($datum as $time){
            echo " => " .strftime("%d  %m %X",$time) ."<br>" ;
            }

//Ordnerinhalt in tabelle eingefügt -> i.o.
for($y=0;$y<count($txt);$y++)
{
    //Dateiname, für ausgabe als titel -> i.o.
    $map = $txt[$y]; 

    
    $fp = fopen($map,"r");
       
        
        
    if ($fp)
        {
            
            //Tabellenfelder -> i.o.
            echo "<tr><td width='5%'></td><td width='625'>";
            echo "<fieldset><legend>" .$map. "</legend><p>";
            
    
            while (!feof($fp))
            {
            
                $zeile = fgets($fp, 1000);
                echo $zeile;
            }
        
        echo "</td><td width='5%'></td></tr><tr><td width='5%'>";
        echo "</td><td width='625' height='15'></td><td width='5%'></td></tr>";
        

        fclose($fp);
        }

    else
    {
        echo "Datei: " .$map. " nicht gefunden";
    }
}
$verz->close();


//Table end -> i.o.
echo "</table>";
?>

--------------------------------------------------------------------------------
```


----------



## nox (22. April 2002)

soweit bin ich jetzt auch gekommen 
nur ist die knacknuss is jetzt beim übergang
vom sortierten datum zur datei!!

das findet ja kein ende...............


----------



## dave_ (22. April 2002)

wenn deine txt dateien von irgend nem script erstellt werden, dann hau in den dateinamen einfach noch aktuelle zeit ( time() ) rein.
nach der kannst du dann sortieren. (unschöne variante.. aber was solls)


----------



## nox (23. April 2002)

guter vorschlag godwich!

leider hab ich mir die ganze sache schonma durch den kopf gehn lassen, abr das ziel währe eigentlich gewesen, dass die txt dateien den titel tragen, der auf der page angezeigt wird.... 

ich danke auf jedenfall für die guten ratschläge die zusammengekommen sind! 

habe offenes ohr (augen) auf weitere einfälle/hilfen

tnx


----------



## Nitromaus (23. April 2002)

es gibt doch bestimmt genügend Profis die das schon gemacht haben , außerdem würde es mich auch interessieremn wie das geht.


----------



## Major (23. April 2002)

Versuche es doch einfach mal damit:

```
<?PHP
$verz = dir("txtdb/aktuell/");

$txt = array();

while($entry=$verz->read())
{
    $txt[filectime("txtdb/aktuell/".$entry)] = "txtdb/aktuell/".$entry;
}
array_shift($txt);  //pfad punkt wird gelöscht aus array (.) -> i.o.
array_shift($txt);  //verzeichnis punkte werden gelöscht aus array (..) -> i.o.
rsort($txt);

//Table beginn -> i.o.
echo "<table width='100%' border='0'>";
echo "<tr><td width='5%'></td>";
echo "<td width='625' height='15'><h1>News:</h1></td>";
echo "<td width='5%'></td></tr>";


//Ordnerinhalt in tabelle eingefügt -> i.o.
for($y=0;$y<count($txt);$y++)
{
    //Dateiname, für ausgabe als titel -> i.o.
    $map = $txt[$y]; 

    $maplink =  $map;
    $fp = fopen($maplink,"r");

    if ($fp)
        {
            
            //Tabellenfelder -> i.o.
            echo "<tr><td width='5%'></td><td width='625'>";
            echo "<fieldset><legend>" .$map. "</legend><p>";
            
    
            while (!feof($fp))
            {
                $zeile = fgets($fp, 1000);
                echo "$zeile";
            }
        
        echo "</td><td width='5%'></td></tr><tr><td width='5%'>";
        echo "</td><td width='625' height='15'></td><td width='5%'></td></tr>";
        

        fclose($fp);
        }

    else
    {
        echo "Datei: " .$map. " nicht gefunden";
    }
}
$verz->close();


//Table end -> i.o.
echo "</table>";
?>
```

wie Du siehst brauchst Du nur 2 Zeilen ändern und es sollte funzen 
Cu und viel Spaß
Major


----------



## nox (23. April 2002)

Danke Danke DANKE!!!!!!!

Major du GOTT (fast)

wenn da nicht der kleine befehlwäre ($entry)


```
<?PHP
....
while($entry=$verz->read())
{
    $txt[(filectime("txtdb/aktuell/".$entry)).$entry] = "txtdb/aktuell/".$entry;
}
array_shift($txt);  //pfad punkt wird gelöscht aus array (.) -> i.o.
array_shift($txt);  //verzeichnis punkte werden gelöscht aus array (..) -> i.o.
rsort($txt);
....
?>
```
kleine ergänzung für Nitromaus



für alle die daa 'bissl' mitgewirkt haben DANKE ich nochmal.

greez

N
O
X


----------



## nox (23. April 2002)

will nich nochma ein neues thema eröffnen

darum schreib ichs hier rein:

leider (logischerweise) wird der gesammte pad inkl. atribut als titel angezeigt
-> sieht schei-sse aus

bsp:
txtdb/aktuell/event 2002.txt

sollte aber nur 'event 2002' stehen!

wie kann ich das umgehen?


```
if ($fp)
        {
            
            //Tabellenfelder -> i.o.
            echo "<tr><td width='5%'></td><td width='625'>";
            echo "<fieldset><legend>" .$map. "</legend><p>"; // $map steht für titel (den restlichen sourcecode findet ihr anhand der beiträge oben)
            
    
            while (!feof($fp))
            {
                $zeile = fgets($fp, 1000);
                echo "$zeile";
            }
        
        echo "</td><td width='5%'></td></tr><tr><td width='5%'>";
```


----------



## Major (23. April 2002)

mit ner regular Expression:

$newmap = preg_replace("/^.*\/$/","",$map);

ich weiss es jetzt nicht genau, da ich hier gerade kein PHP zu laufen habe, aber versuche es mal so.

Cu Major


----------



## nox (23. April 2002)

nöö das will net 

kennst du eine hilfe, in dem solche fälle beschrieben sind?
(selfphp kenn ich)


----------



## Major (23. April 2002)

sorry, bin nicht gleich drauf gekommen, nimm das

$newmap = basename($map);

das sollte es sein.

Cu Major


----------



## dave_ (23. April 2002)

Die ausgabe der datei lässt sich ja ein wenig bearbeiten, man kann das datum ja "rausschnipseln" und nicht mit ausgeben


----------



## nox (23. April 2002)

ok mit

```
$newmap = basename($map);
```
geht der pfad weg (txtdb/aktuell) aber das atribut bleibt klebn (.txt) is ja eigentlich logisch!
bin jetzt gerade auf der suche nach einem befehl der die atribute entfernt.

was auch ganz gut währe, wenn es einen befehl gibt der die letzten paar(4) zeichen raus kürzt (.txt)


----------



## Major (23. April 2002)

ich nehme mal an mit atribut nennst Du die Dateierweiterung .txt

die wegzubekommen ist dann auch einfach:

$newmap = substr( basename($map),0,-4);

Ich gebe Dir mal einen Tip, es gibt das PHP-Handbuch als .chm Format.
Da findet man relativ schnell solche Funktionen.

Cu Major


----------



## nox (24. April 2002)

wie heisst das buch?
hast evw. ISBN nummer?

oder gibts elektronische bücher (internet)?

suche einfach ein gutes buch über php(4).

hab schon eins aber das ist sehr beschränkt


----------



## Major (24. April 2002)

folge dem Link:

http://www.php.net/distributions/manual/php_manual_en.chm


zu php braucht man nu wirklich nix mehr aus Zellulose in der Hand. ;-)

Cu Major


----------



## Nitromaus (24. April 2002)

man könnte den datei namen doch trennen am punkt, und nur den ersten Teil ausgegen, oder es müsste auch so gehn 

```
$var1=str_replace(".txt","",$var2);
```
var2 ist der ursprüngliche namen

PS: Zum Buchthema, ich lese gerade von DataBecker das buch php4 &mysql - Internet Intern oder so. Beschreibt auch GD Programmierung


----------



## nox (24. April 2002)

ja so würde es auch gehen
es wäre dan einfach '.txt' weg.


```
$var1=basename(str_replace(".txt","",$map));
```
kombinierte lösung, dann wäre alles wieder im lot...

tnx


----------

