Einzelnen Beitrag anzeigen
Alt 17.10.2008, 23:32  
Robsen
Neuer Benutzer
 
Registriert seit: 17.10.2008
Beiträge: 21
PHP-Kenntnisse:
Fortgeschritten
Robsen befindet sich auf einem aufstrebenden Ast
Standard

Hallo,

zunächst ein Hinweis - ich empfinde es nicht als sehr klug, die Daten zunächst in einem Array zu halten und dann anschließend wegzuschreiben. Ok sagen wir es mal so - es ist abhängig von der Datenmenge. Bei sehr großen CSV Dateien kann es dann aber schnell ans Memory Limit gehen und dann ist aus die Maus. Bei kleinen CSV Dateien ist das jedoch kein Problem.

ok nun mal zu deiner Lösung:
PHP-Code:
$bufferRows = array ();

$handle fopen ("datei.csv","r");
if (
$handle)
{
    while ( (
$row fgetcsv ($handle1000";")) !== FALSE )
    {
        if (
isDuplicate ($row$bufferRows))
            continue;
        
        
// wenn du sammeln möchtest 
        
$bufferRows [] = $row;
    }
    
fclose ($handle);
    
    
// und ab in die DB
    // Fetchen von $bufferRows ... mysql_query
}

/**
 * findet Dupletten
 *
 * @param array $row ([])
 * @param array $rowsBuffered ([][])
 * @return boolean
 */
function isDuplicate ($row$rowsBuffered)
{
    list (
$fieldA$fieldB$fieldC$fieldD) = $row;
    
    
// hier dann dein Vergleichsalgo
    // z.B. sinngemäß! mußte natürlich anpassen
    
foreach ($rowsBuffered as $bufferRow)
    {
        list (
$fieldA_x$fieldB_x$fieldC_x$fieldD_x) = $bufferRow;
        if (
$fieldA==$fieldA_x) return true;
        if (
$fieldB==$fieldB_x) return true;
        if (
$fieldC==$fieldC_x) return true;
        if (
$fieldD==$fieldD_x) return true;
    }
    
    return 
false;

Habe für mich unwesentliche DInge (Wie den Increment) mal raus gehauen....

Ich würde die Daten jedoch direkt in die DB schreiben und innerhalb der Funktion mit einer DB Abfrage arbeiten.

Grüße Robsen

Geändert von Robsen (17.10.2008 um 23:44 Uhr).
Robsen ist offline   Mit Zitat antworten