SELFPHP: Version 5.8.2 Befehlsreferenz - Tutorial – Kochbuch – Forum für PHP Einsteiger und professionelle Entwickler

SELFPHP


Professional CronJob-Service

Suche



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



:: Buchempfehlung ::

Websites optimieren für Google & Co.

Websites optimieren für Google & Co. zur Buchempfehlung
 

:: Anbieterverzeichnis ::

Globale Branchen

Informieren Sie sich über ausgewählte Unternehmen im Anbieterverzeichnis von SELFPHP  

 

:: Newsletter ::

Abonnieren Sie hier den kostenlosen SELFPHP Newsletter!

Vorname: 
Name:
E-Mail:
 
 

Zurück   PHP Forum > SELFPHP > PHP Grundlagen
Hilfe Community Kalender Heutige Beiträge Suchen

PHP Grundlagen Hier kann über grundlegende Probleme oder Anfängerschwierigkeiten diskutiert werden

Antwort
 
Themen-Optionen Ansicht
  #11  
Alt 05.09.2007, 14:23:25
Raketenmann Raketenmann ist offline
Junior Member
 
Registriert seit: Jun 2004
Beiträge: 473
AW: Wie Array aufteilen?

Zitat:
Zitat von defabricator Beitrag anzeigen
Nicht Dein rumgewurstel sondern das von maiskolben. Also nicht gleich auf den Schlips getreten fühlen, ok?
OK...


Zitat:
Zitat von defabricator Beitrag anzeigen
Hm, wer macht sich denn hier nun wichtig? Uhhh... jetzt muss sich PHP selbst um die offene Resource kümmern. Das ist ja eine Katastrophe.
Ich? nöö....
Ich finde lediglich, dass dieses "PHP wirds am Ende der Skriptausführung schon richten" keine vorteilhafte Einstellung ist...

...und es geht dabei auch nicht um mich, denn egal ob wichtig oder nicht, ich habe es ja gesehen. Es geht um die Art der Kommunikation mit einem, der sich Anfänger nennt.
Mit Zitat antworten
  #12  
Alt 05.09.2007, 14:51:09
defabricator defabricator ist offline
Senior Member
 
Registriert seit: Sep 2007
Ort: Potsdam
Alter: 55
Beiträge: 1.020
AW: Wie Array aufteilen?

Zitat:
Zitat von Raketenmann Beitrag anzeigen
Ich? nöö....
Ich finde lediglich, dass dieses "PHP wirds am Ende der Skriptausführung schon richten" keine vorteilhafte Einstellung ist...
Nein, die richtige Aufteilung der Sichtbarkeitsgrenzen + garbage collection (imho eine der drei wichtigsten Errungenschaften beim Entwicklen) werden es in der Regel schon richten. Meine "Lösung" wäre daher nicht das Einfügen von fclose(), sondern das Aufteilen in entsprechende Funktionen. Aber um des lieben Friedens Willen (und weil maiskolben die Diskussion hier erstmal vermutlich wenig bis garnicht interessiert): Sobald die Datensätze eingelesen sind, wird die Dateiresource nicht mehr benötigt und ein flcose() vor usort() in meinem ursprünglichen Skript gibt die Resource früher (oder rechtzeitig, je nach Standpunkt) wieder frei; Resourcen sollten nicht unnötig lange gehalten werden. Danke für den wertvollen Hinweis, Raketenmann ;)
Mit Zitat antworten
  #13  
Alt 05.09.2007, 20:13:40
Benutzerbild von maiskolben
maiskolben maiskolben ist offline
Junior Member
 
Registriert seit: Aug 2006
Ort: Bremen
Alter: 43
Beiträge: 247
AW: Wie Array aufteilen?

Zitat:
und weil maiskolben die Diskussion hier erstmal vermutlich wenig bis garnicht interessiert
Nein, mich interessiert eure Diskussion über "Welche Dinge kann man bei einem Anfänger voraussetzen", und "der Sinn oder Unsinn von verschiedenen Herangehensweisen"... Doch muss ich einfach sagen, dass mir der Stil von Raketenmann ein wenig mehr einleuchtet. Denn in der Vergangenheit hat er mir durch Hilfestellungen (seine Scripte) einiges an Licht in's Dunkle gebracht, und so habe ich natürlich auch etwas gelernt. Zum Beipiel die preg_match(); Funktion...

Dein Ansatz ist ebenso vernünftig wie der von Raketenmann, und man mag sich darüber streiten, für einfache Umsetzungen Funktionen zu schreiben. Aber davon habe ich keinen richtigen Plan...

Ich danke euch beiden für eure Hilfe, doch möchte ich mir vorbehalten mir auszusuchen (welch ein Luxus!!!) wessen Hilfestellungen ich aufnehme und gebrauche!

Um mal wieder zurück zum Thema zu kommen: Ich bekomme meine Einträge nicht geordnet! Was ich auch anstelle in meiner Unwissendheit!

Ich möchte euch beiden mal das komplette Script zeigen...

PHP-Code:
<?php
    
// Pfade bestimmen (NUR bei _einem_ Index, auf dem Beitraege
    // aus mehreren Kategorien angezeigt werden sollen!)

    
$pfadx                     =    array();
    
$pfadx['n']        =     $_SERVER['DOCUMENT_ROOT'] . "/pfad/kategorie1/";
    
$pfadx['f']        =     $_SERVER['DOCUMENT_ROOT'] . "/pfad/kategorie2/";
    
$pfadx['c']     =     $_SERVER['DOCUMENT_ROOT'] . "/pfad/kategorie3/";
    
$pfadx['r']     =     $_SERVER['DOCUMENT_ROOT'] . "/pfad/kategorie4/";
    
$pfadx['p']     =     $_SERVER['DOCUMENT_ROOT'] . "/pfad/kategorie5/";

    
$pfade $pfadx;    
    
$datei $pfade 'index.txt';
    
                
foreach(
$pfade as $pfad// Pfade als Schleife durchlaufen, und Dateien einlesen
{
    
$fp fopen($pfad "index.txt""r");
        
// Nur die vollen heraussuchen!
        
while(!feof($fp))  
        {
           
$voll trim(fgets($fp));
           if (
strlen($voll))    
           
$zeilen[] = $voll;                           
        }
fclose($fp);      
}

$element = array(); 
$ts_sort = array();

    for(
$z=0;$z<count($zeilen);$z++) 
   { 
       
$zeil explode("|",$zeilen[$z]); 
      if(
$zeil[0] == '001'
      { 
          
$ts_arr explode("/",$zeil[1]);
         
$zeil[1] = mktime(0,0,0,$ts_arr[1],$ts_arr[0],$ts_arr[2]);

         
$ts_sort[] = $zeil[1];
         
krsort($ts_sort);

         
$element $zeil;
            
            
// Template einbinden und Variablen ausgeben! 
            
include ($_SERVER['DOCUMENT_ROOT']) . ('/template.html');
       }
    }
?>
Der Aufruf des Templates muss innerhalb der Schleife kommen, da sonst nur der letzte Inhalt im Array im Template angezeigt wird...

Ist das einiegermaßen plausibel? Es werden mehrere Dateien (index.txt - Zeilenh) aus verschiedenen Ordnern geöffnet (erste Schleife) und in das Array Zeilen geschrieben.

Dann im Script von Raketenmann werden nur die Zeilen mit einer 001 davor in ein Array geschrieben. Das sind dann die Beiträge die auf der Startseite angezeigt werden sollen, sozusagen die wichtigsten Neuigkeiten usw...

Aber, ich bekomme die Beiträge nicht sortiert, doch sitze ich nicht untätig rum und erwarte von euch Hilfe, sondern ich habe echt schon sehr viel herumprobiert...

Ich weiß nicht was das soll - es will sich nicht sortieren lassen...
__________________
Worte haben Macht - nichts...

Geändert von maiskolben (05.09.2007 um 22:38:35 Uhr)
Mit Zitat antworten
  #14  
Alt 05.09.2007, 21:55:41
defabricator defabricator ist offline
Senior Member
 
Registriert seit: Sep 2007
Ort: Potsdam
Alter: 55
Beiträge: 1.020
AW: Wie Array aufteilen?

Du hast eine Schleife zum Einlesen der Daten
Code:
foreach($pfade as $pfad) // Pfade als Schleife durchlaufen, und Dateien einlesen
{
  fopen
  while/fgets
  $zeilen[]
}
Danach hast Du alle Daten im Array $zeilen. Soweit so gut.

In Deiner zweite Schleife willst Du alles aufeinmal reinpacken: umformen, sortieren und ausgeben. Das geht so nicht, denn schon für die Sortierung brauchst Du alle Datensätze bereits umgewandelt.

Also
- erst die Schleife zum Einlesen
- dann eine Schleife zum Umwandeln der Datenzeilen.
- dann sortieren
- dann eine Schleife zum Ausgaben
Die ersten beiden Punkte kannst Du zusammenfassen.

Und nochmal eine Rückfrage: Kann es mehr als einen Datensatz zu einem Datum geben?

Geändert von defabricator (05.09.2007 um 21:58:30 Uhr)
Mit Zitat antworten
  #15  
Alt 05.09.2007, 22:22:27
Benutzerbild von maiskolben
maiskolben maiskolben ist offline
Junior Member
 
Registriert seit: Aug 2006
Ort: Bremen
Alter: 43
Beiträge: 247
AW: Wie Array aufteilen?

Die Antwort ist: ja!
Es gibt zu einem Timestamp manchmal mehrere Zeilen...

Ich habe es, um Himmels willen!!!, jetzt geschafft, dass die Beiträge - fast - nach dem Datum in Form des Timestamps sortiert ausgegeben werden, bzw. in einer extra! Schleife nach dem sortieren ausgegeben werden...

Ich bräuchte einen Timestamp, der etwas genauer ist, nech? Also auch das Datum und die genaue Uhrzeit als $zeile[1]; und daraus den TS machen... ?

hmmm...

Abersoweit so gut!
Danke für die Aufklärung, dass man das nicht alles in einer Schleife machen kann! Hätte ja mal den kompletten Code vorab reinstellen können, ich Idi!

Bis jetzt Stand:

PHP-Code:
<?php
    
/*// Pfade bestimmen (NUR bei _einem_ Index, auf dem Beitraege
    // aus mehreren Kategorien angezeigt werden sollen!)

    $pfadx            =    array();
    $pfadx['n']        =     $_SERVER['DOCUMENT_ROOT'] . "/pfad/kategorie1/";
    $pfadx['f']        =     $_SERVER['DOCUMENT_ROOT'] . "/pfad/kategorie2/";
    $pfadx['c']     =     $_SERVER['DOCUMENT_ROOT'] . "/pfad/kategorie3/";
    $pfadx['r']     =     $_SERVER['DOCUMENT_ROOT'] . "/pfad/kategorie4/";
    $pfadx['p']     =     $_SERVER['DOCUMENT_ROOT'] . "/pfad/kategorie5/";

    $pfade = $pfadx;
                
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);      
}

    */
for($z=0;$z<count($zeilen);$z++) 
   { 
       
$zeile explode("|",$zeilen[$z]); 
      if(
$zeile[0] == '001'
      { 
          
$datum explode("/",$zeile[1]);
         
$bz mktime(0,0,0,$datum[1],$datum[0],$datum[2]);
              
$sortiert[$bz] = $zeile;       
       }
    }

array_multisort($sortiert);

for(
$y=0;$y<count($sortiert);$y++) 
   { 
       
$element $sortiert[$y];        
        
// Template einbinden und Variablen ausgeben! 
        
include ($_SERVER['DOCUMENT_ROOT']) . ('/template.html');
   }
?>
__________________
Worte haben Macht - nichts...

Geändert von maiskolben (05.09.2007 um 22:41:09 Uhr)
Mit Zitat antworten
  #16  
Alt 05.09.2007, 22:47:24
defabricator defabricator ist offline
Senior Member
 
Registriert seit: Sep 2007
Ort: Potsdam
Alter: 55
Beiträge: 1.020
AW: Wie Array aufteilen?

Du schreibst den Zeitstempel immer noch als Index des Feldes
Zitat:
$bz = mktime(0,0,0,$datum[1],$datum[0],$datum[2]);
$sortiert[$bz] = $zeile;
aber dafür hast Du jetzt plötzlich krsort() durch array_multisort() ersetzt, das sich nicht um den Index kümmert. Warum?

Zitat:
Zitat von maiskolben
Ich bräuchte einen Timestamp, der etwas genauer ist, nech? Also auch das Datum und die genaue Uhrzeit als $zeile[1]; und daraus den TS machen... ?
a) Du kannst das Eingabeformat ändern? Warum schreibst Du dann anstatt dd/mm/yy nicht gleich einen Zeitstempel in die Dateien?
b) Mit dem Ansatz über Index/krsort wirst Du immer das Problem haben, dass zwei gleiche Zeitstempel sich überschreiben. Wenn Du Stunden, Minuten und Sekunden hinzufügst, verringerst Du das Probelm zwar vielleicht, aber es bleibt im Prinzip bestehen.

Geändert von defabricator (05.09.2007 um 22:47:57 Uhr)
Mit Zitat antworten
  #17  
Alt 05.09.2007, 23:13:09
Benutzerbild von maiskolben
maiskolben maiskolben ist offline
Junior Member
 
Registriert seit: Aug 2006
Ort: Bremen
Alter: 43
Beiträge: 247
AW: Wie Array aufteilen?

Hmmm...

Ich habe jetzt folgendes Array...
Zuerst die letzte Schleife:

PHP-Code:
       }
    }

krsort($sortiert);

for(
$y=0;$y<count($sortiert);$y++) 
   { 
       
$element $sortiert;        
        
// Template einbinden und Variablen ausgeben! 
        
include ($_SERVER['DOCUMENT_ROOT']) . ('/template.html');
    
print_r($sortiert);
   } 
HTML-Code:
Array
(
    [1188770400] => Array
        (
            [0] => 001
            [1] => 03/09/07
            [2] => Überschrift
            [3] => text
            [4] => text
            [5] => text
            [6] => textjpg
            [7] => text
            [8] => text
        )

    [1187128800] => Array
        (
            [0] => 001
            [1] => 15/08/07
            [2] => Überschrift
            [3] => text
            [4] => text
            [5] => text
            [6] => text.jpg
            [7] => text
            [8] => text
        )

    [1185141600] => Array
        (
            [0] => 001
            [1] => 23/07/07
            [2] => Überschrift
            [3] => text
            [4] => text
            [5] => text
            [6] => text.JPG
            [7] => text
            [8] => text
        )

)
Bei dem einbinden des Templates bekomme ich die Fehlermeldung, undefined offset.
Wird jetzt das Array nach den Timestamps im Key sortiert, oder ist das auch Unsinn...?
__________________
Worte haben Macht - nichts...
Mit Zitat antworten
  #18  
Alt 05.09.2007, 23:28:55
defabricator defabricator ist offline
Senior Member
 
Registriert seit: Sep 2007
Ort: Potsdam
Alter: 55
Beiträge: 1.020
AW: Wie Array aufteilen?

Zitat:
Bei dem einbinden des Templates bekomme ich die Fehlermeldung, undefined offset.
In der Meldung steht noch mehr. Und das ist der eigentlich interessante Teil. Da steht nämlich, welcher offset/Index erwartet aber nicht gefunden wird.

Zitat:
Wird jetzt das Array nach den Timestamps im Key sortiert, oder ist das auch Unsinn...?
Na, ist das Array nu sortiert oder nicht? Was macht krsort?
Ja, es ist nach dem Index (abwärts) sortiert.

Auf jeden Fall beteht noch das Problem
Zitat:
Zitat von defabricator
b) Mit dem Ansatz über Index/krsort wirst Du immer das Problem haben, dass zwei gleiche Zeitstempel sich überschreiben. Wenn Du Stunden, Minuten und Sekunden hinzufügst, verringerst Du das Probelm zwar vielleicht, aber es bleibt im Prinzip bestehen.
Ausserdem werden Daten vor dem 9.9.2001 falsch einsortiert. Der Zeitstempel springt da nämlich von 999999999 (9 Stellen) auf 1000000000 (10 Stellen).

Ob ich noch einmal vorsichtig darauf hinweisen darf, dass http://www.selfphp.info/forum/showpo...64&postcount=4 all diese Probleme nicht hat?

Geändert von defabricator (05.09.2007 um 23:29:26 Uhr)
Mit Zitat antworten
  #19  
Alt 05.09.2007, 23:40:09
Benutzerbild von maiskolben
maiskolben maiskolben ist offline
Junior Member
 
Registriert seit: Aug 2006
Ort: Bremen
Alter: 43
Beiträge: 247
AW: Wie Array aufteilen?

Ja, dass darfst Du gern, und ich werde mir Dein Script auch mal reinziehen.
Es ist aber ein bekacktes Problem, dass ich gerne in den Griff kriegen würde...
krsort(); sortiert mir in einem 2D Array von hoch absteigend, richtig?

PHP-Code:
for($z=0;$z<count($zeilen);$z++) 
   { 
       
$zeile explode("|",$zeilen[$z]); 
      if(
$zeile[0] == '001'
      { 
          
$datum explode("/",$zeile[1]);
         
$bz mktime(0,0,0,$datum[1],$datum[0],$datum[2]);
              
$sortiert[$bz] = $zeile;       
       }
    }

// Bis hierhin ist alles richtig.
// Ich habe ein 2D Array ($sortiert), mit den Schlüsseln als Timestamp für krsort();
// Nun brauche ich die Augabeschleife... 

krsort($sortiert);

// Ausgabeschleife...
for($y=0;$y<count($sortiert);$y++) 
   { 
        
// Damit die Ausgabe im Template funktioniert, wird hier einfach
        // das Array nochmal gezählt, und heraufgezählt/heraufdurchlaufend...
       
        // Ab hier komme ich nicht mehr weiter, ich komme
        // über die zweite Dimension nicht raus. 
        
$element $sortiert// ?


        // $element = $sortiert[$bz];
        // So habe ich nur den jeweils ersten Beitrag im Array 
        // (also die Zeile aufgeteilt und $element zugewiesen!) 
        // dreimal hintereinander... AHHH!

        
        // Template einbinden und Variablen ausgeben! 
        
include ($_SERVER['DOCUMENT_ROOT']) . ('/template.html');
   }
?> 
Ich hol' mir mal einen Kaffe...
__________________
Worte haben Macht - nichts...

Geändert von maiskolben (05.09.2007 um 23:43:49 Uhr)
Mit Zitat antworten
  #20  
Alt 05.09.2007, 23:45:29
defabricator defabricator ist offline
Senior Member
 
Registriert seit: Sep 2007
Ort: Potsdam
Alter: 55
Beiträge: 1.020
AW: Wie Array aufteilen?

Zitat:
Zitat von maiskolben Beitrag anzeigen
krsort(); sortiert mir in einem 2D Array von hoch absteigend, richtig?
Ja, nach dem Index absteigend.
Und Du kannst in einem Feld nicht zweimal den selben Index haben. Zwei Einträge mit dem selben Datum überschreiben sich hier also. Du kannst zwar noch eine weitere Dimension einfügen, um mehrere Datensätze mit dem gleichen Datum zu speichern, aber das macht die Sache noch viel unnötiger komplizierter.
Mit Zitat antworten
Antwort


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.

BB-Code ist an.
Smileys sind aus.
[IMG] Code ist aus.
HTML-Code ist aus.

Gehe zu

Ähnliche Themen
Thema Autor Forum Antworten Letzter Beitrag
Mehrdimensionales Array sortieren MrLongbaugh PHP Grundlagen 10 06.03.2008 12:02:47
array probleme :) stefan600 PHP Grundlagen 1 14.05.2007 10:18:48
Array sortierten sinfo PHP für Fortgeschrittene und Experten 4 26.11.2006 15:26:57
array im array SolidBody PHP Grundlagen 3 20.07.2006 13:38:41
Einzelne Daten aus Textdatei Auslesen azubinator PHP Grundlagen 153 17.12.2004 13:36:58


Alle Zeitangaben in WEZ +2. Es ist jetzt 09:38:46 Uhr.


Powered by vBulletin® Version 3.8.3 (Deutsch)
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.


© 2001-2024 E-Mail SELFPHP OHG, info@selfphp.deImpressumKontakt