Einzelnen Beitrag anzeigen
  #3 (permalink)  
Alt 15-03-2013, 08:52
Melewo
 Registrierter Benutzer
Links : Onlinestatus : Melewo ist offline
Registriert seit: Jan 2013
Beiträge: 365
Melewo befindet sich auf einem aufstrebenden Ast
Standard

Habe mal einen Test gemacht, wenn Du in etwa die Anzahl der Zeilen weißt, dann könnte es so gehen. Im Test, Anzahl der Zeilen in der CSV 1920, davon nur die letzten 120 Zeilen einlesen. Erste Schleife zählt nur hoch, um den Dateizeiger zu positionieren, bevor die zweite Schleife mit der Arbeit beginnt und nur die letzten 120 Zeilen in den Array einspeist, der dann rückwärts ausgelesen werden kann.


PHP-Code:
<?php

$abz 
1;
$csv "testpost.csv";

if ((
$handle fopen($csv"r")) !== false) {

    while ((
fgets($handle4096)) !== false) {

        
$abz++;
        if (
$abz 1800) {

            while ((
$data fgetcsv($handle4096";")) !== false) {

                
$abz++;
                
$num count($data);
                
$daten[] = " - ".$abz."<br>\n"// steht in der Ausgabe unter dem jeweiligen Datensatz!

                
for ($i 0$i $num$i++) {
                
$daten[] = $data[$i];
                }
            }
        }
    }
    
fclose($handle);
}

$daten array_reverse($daten);

foreach (
$daten as $ausgabe) {

    echo 
$ausgabe."<br>\n";
}
?>
Ein zweiter Test, CSV mit 51.814 Zeilen, ausgelesen Zeile 51.702 bis 51.814, war genauso schnell wie der erste Test.

Laufzeit unter Localhost bei 51.814:

Mit einer Schleife und die letzten 120 ausgeben: 5.9 Sekunden
Mit zwei Schleifen und die letzten 112 ausgeben: 0.1 Sekunden

Wenn ich die Zeilen vorher zähle, erhöht sich die die Laufzeit auf 0.2 bis 0.3 Sekunden. Von unset musste ich bei einer Schleife Gebrauch machen, da memory size überschritten, bei zwei hätte ich drauf verzichten können.

PHP-Code:
$abz 1;
$csv "testpost2.csv";

$zeilen  file($csv);
$abzeile count($zeilen) - 120;
unset (
$zeilen);

if ((
$handle fopen($csv"r")) !== false) {

    while ((
fgets($handle4096)) !== false) {

        
$abz++;
        if (
$abz $abzeile) { ... 

Geändert von Melewo (15-03-2013 um 11:13 Uhr)
Mit Zitat antworten