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 ($handle, 1000, ";")) !== 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