CronJob-Service
bei SELFPHP mit ...
|
+ minütlichen Aufrufen
+ eigenem Crontab Eintrag
+ unbegrenzten CronJobs
+ Statistiken
+ Beispielaufrufen
+ Control-Bereich
Führen Sie mit den CronJobs von
SELFPHP zeitgesteuert Programme
auf Ihrem Server
aus. Weitere Infos
|
:: Anbieterverzeichnis ::
Globale Branchen
Informieren Sie sich über ausgewählte Unternehmen im Anbieterverzeichnis von SELFPHP
:: Newsletter ::
Abonnieren Sie hier den kostenlosen
SELFPHP Newsletter!
|
PHP Grundlagen Hier kann über grundlegende Probleme oder Anfängerschwierigkeiten diskutiert werden |
06.09.2007, 01:56:46
|
|
Junior Member
|
|
Registriert seit: Aug 2006
Ort: Bremen
Alter: 43
Beiträge: 247
|
|
AW: Wie Array aufteilen?
Also Du meinst , wenn $zeile[1] das normale schon formatierte Datum ist, und der Schlüssel der Timestamp... So schreibt er aber über, mit multisort...
Eine Idee ist noch, das aktuelle Datum mit dem Timestamp der $zeile[1] zu vergleichen, und den dazugehörigen Schlüssel der am nächsten dran ist heraus zu suchen und als erstes und absteigend in das Array zu übergeben!
Boah! Shiddy!
Ich wünsche Dir erstmal eine gute Nacht!
Und vielen Dank!
Bis zur nächsten Frage, wa? ^^
Tschüss!
__________________
Worte haben Macht - nichts...
Geändert von maiskolben (06.09.2007 um 02:00:55 Uhr)
|
06.09.2007, 02:01:56
|
Senior Member
|
|
Registriert seit: Sep 2007
Ort: Potsdam
Alter: 55
Beiträge: 1.020
|
|
AW: Wie Array aufteilen?
Zitat:
Zitat von maiskolben
Also Du meinst , wenn $zeile[1] das normale schon formatierte Datum ist, und der Schlüssel der Timestamp... So schreibt er aber über, mit multisort...
|
Meine ich nicht. Ich verstehe den Satz oder die zwei Sätze nämlich nicht.
|
06.09.2007, 02:06:38
|
|
Junior Member
|
|
Registriert seit: Aug 2006
Ort: Bremen
Alter: 43
Beiträge: 247
|
|
AW: Wie Array aufteilen?
Na so:
PHP-Code:
if ($zeilen[0] === '001')
{
$dat = explode('/', $zeilen[1]);
$zeilen[1] = mktime(0,0,0, $dat[1], $dat[0], $dat[2]);
$datensaetze[$zeilen[1]] = $zeilen;
}
HTML-Code:
Array
{
[9837457345] => Array {
[0] => "001"
[1] => "9837457345"
[2] => "text"
[3] => "text"
usw...
}
}
Und den Schlüssel mit dem aktuellen Datum zu vergleichen...
__________________
Worte haben Macht - nichts...
|
06.09.2007, 02:20:56
|
Senior Member
|
|
Registriert seit: Sep 2007
Ort: Potsdam
Alter: 55
Beiträge: 1.020
|
|
AW: Wie Array aufteilen?
Sorry, verstehe ich trotzdem nicht.
|
06.09.2007, 11:15:41
|
Junior Member
|
|
Registriert seit: Jun 2004
Beiträge: 473
|
|
AW: Wie Array aufteilen?
Mannomann... ich hätte nicht gedacht, dass sich das hier noch so in die Länge zieht ;-)
Ich glaube, inzwischen sind sich alle einig, dass der krsort() Ansatz nur mit Datum, ohne Uhrzeit nicht funktionieren kann.
Insofern musst Du auf jeden Fall den Timestamp aus dem Array-Index herausnehmen. Sonst funktioniert bei dir keiner der beiden Wege (Raketenmann, defabricator), weil (hast du ja schon gemerkt) Elemente überschrieben werden.
Ich weiß nicht wie du defabricators Skript ausprobiert hast, bei den Übernahmen von mir, hast du immer eine Mischung aus zwei Wegen verwendet.
In dem einen Beitrag wird nur $ts_sort sortiert, in einem anderen nur die Hälfte an array_multisort() übergeben...
...oder fast korrekt übernommen (multisort Variante), aber mit Timestamp im Array-Index.
Wenn das mit array_multisort() funktionieren soll,
- verwende nur leere Klammern beim Hinzufügen von Array-Elementen (und füge $elemente Arrays hinzu),
- laß auf jeden Fall das Erzeugen der Elemente der beiden Arrays hintereinander stehen (du brauchst beide und die Indizies der Elemente müssen gleich sein, auf keinen Fall zu früh an einem der beiden Arrays herumsortieren)
- und sie müssen beide an die Funktion array_multisort übergeben werden (das "SORT_DESC"-Flag muß $ts_sort zugeordnet sein).
Sonst funktioniert es nicht.
Ich würde das Beispiel wirklich exakt so lassen wie es ist und oben drüber das Dateisammeln einfügen und unten drunter die Schleife, die das Template füllt (hattet ihr ja schon)
Vielleicht machst du einfach mal eine neue Datei auf, in der du die verschiedenen Quelltextteile Stück für Stück einfügst.
So ist es wahrscheinlich übersichtlicher, als Zeilenweise im bestehenden Skript auszutauschen - dabei übersieht man (ich zumindest) viel zuviel...
Solange alle deine Zeilen aus den verschiedene Quellen in einem Array landen und die erwarteten Daten überall an der gleichen Stelle stehen, ist - egal welche Sortierfunktion - der Ursprung der Daten völlig egal.
PS:
MIt meinem Test-Array funktionieren ebenfalls sowohl array_multisort() und auch defabricators usort() Lösung gut, sie schliessen mit identischem Ergebnis ab
Insofern denke ich wirklich, dass es an der Übernahme des Quelltextes scheitert. Aber war ja Ende auch schon ein bißchen später gestern... ;-) Raketenmann war da längst im Reich der Träume angekommen.
Geändert von Raketenmann (06.09.2007 um 11:18:09 Uhr)
|
06.09.2007, 19:06:55
|
|
Junior Member
|
|
Registriert seit: Aug 2006
Ort: Bremen
Alter: 43
Beiträge: 247
|
|
AW: Wie Array aufteilen?
Hallo ihr beiden! Gut geschlafen?
Ich bin zufrieden, da die neuen Beiträge nun als erstes angezeigt werden!
Die letzte Antwort von Dir Raketenmann war entscheidend...
Ich bedanke mich recht herzlich für die Geduld, und den großen Lerneffekt!
Damit ist dieser Thread fertig und alle meine Fragen beantwortet!
Hier nochmal das finale Script...
PHP-Code:
// Pfade bestimmen (NUR bei _einem_ Index, auf dem Beitraege
// aus mehreren Kategorien angezeigt werden sollen!)
$pfadx = array();
$pfadx['n'] = $_SERVER['DOCUMENT_ROOT'] . "/pfad/beitraege/";
$pfadx['f'] = $_SERVER['DOCUMENT_ROOT'] . "/pfad/beitraege/";
$pfadx['c'] = $_SERVER['DOCUMENT_ROOT'] . "/pfad/beitraege/";
$pfadx['r'] = $_SERVER['DOCUMENT_ROOT'] . "/pfad/beitraege/";
$pfadx['p'] = $_SERVER['DOCUMENT_ROOT'] . "/pfad/beitraege/";
$pfade = $pfadx;
// Einlesen
foreach($pfade as $pfad) // Pfade als Schleife durchlaufen
{
$fp = fopen($pfad . "index.txt", "r");
while(!feof($fp))
{
$voll = trim(fgets($fp));
if (strlen($voll))
$zeilen[] = $voll;
}
fclose($fp);
}
// Sortieren
$z_elem = array();
for($z=0;$z<count($zeilen);$z++)
{
$tarr = explode("|",$zeilen[$z]);
if($tarr[0] == '001')
{
$z_elem[] = $tarr;
}
}
array_multisort($z_elem, SORT_DESC);
// Ausgabe
foreach($z_elem as $elem)
{
$element = $elem;
// Template einbinden und Variablen ausgeben!
include ($_SERVER['DOCUMENT_ROOT']) . ('/template.html');
}
Ich schreibe jetzt direkt beim erstellen der neuen Beiträge den Unix-Timestamp in die Textzeile. Er setzt sich zusammen aus dem Datum und der genauen Uhrzeit, um möglichst keine gleichen Timestamps zu haben, da sich das betreffende Array sonst überschreiben würde...
Funktionen zum lösen des Problems sind:
time()
mktime()
foreach()
for()
array_multisort()
while()
BEANTWORTET
__________________
Worte haben Macht - nichts...
Geändert von maiskolben (06.09.2007 um 19:09:06 Uhr)
|
06.09.2007, 22:00:27
|
Senior Member
|
|
Registriert seit: Sep 2007
Ort: Potsdam
Alter: 55
Beiträge: 1.020
|
|
AW: Wie Array aufteilen?
Zitat:
Zitat von maiskolben
Ich schreibe jetzt direkt beim erstellen der neuen Beiträge den Unix-Timestamp in die Textzeile. Er setzt sich zusammen aus dem Datum und der genauen Uhrzeit, um möglichst keine gleichen Timestamps zu haben, da sich das betreffende Array sonst überschreiben würde...
|
"Möglichst" ist nicht gut genau.
Aber da der Zeitstempel nicht als Index verwendet wird, überschreibt sich da eh nichts.
Es gibt kein Problem mit $arr = array('a', 'a');
nur mit $arr['a']=1; $arr[1]=2
Und das kommt in der jetzigen Fassung nicht vor.
Für nur ein einziges Feld braucht man kein array_multisort(). sort()/rsort() tun es genauso.
Allerdings sehen die Arrayelement nun so aus:
001|1189108622|..
001|1189308624|..
Und es sind Zeichenketten. array_multisort() vergleicht also textuell. Nehmen wir mal einen Eintrag vom 8.9.2001 12:00:00
001|999943200|..
bei einem textuellen Vergleich landet das nach
001|1189308624|..
obwohl es zeitlich davor liegt.
Geändert von defabricator (06.09.2007 um 22:01:01 Uhr)
|
Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1)
|
|
Forumregeln
|
Es ist Ihnen nicht erlaubt, neue Themen zu verfassen.
Es ist Ihnen nicht erlaubt, auf Beiträge zu antworten.
Es ist Ihnen nicht erlaubt, Anhänge hochzuladen.
Es ist Ihnen nicht erlaubt, Ihre Beiträge zu bearbeiten.
HTML-Code ist aus.
|
|
|
Alle Zeitangaben in WEZ +2. Es ist jetzt 13:22:54 Uhr.
|