2017-11-08 6 views
0

Ich habe versucht, eine Antwort zu finden, aber ich war nicht erfolgreich, bitte helfen.fputcsv, mehrere Arrays in eine Zeile oder Spalte

Ich versuche, mehrere Zeilen von data.txt von preg_match zu einzelnen Zeile oder Spalte in data.csv aufzufüllen. Es muss in einem einzigen Array sein, weil ich nur eindeutige Zahlen brauche. -> oder eine andere Option die nur eindeutige Zahlen erhalten

Ich konnte Arrays nicht zu einem einzigen Array zusammenführen und es wie ein Array in eine einzelne Zeile auffüllen. Ich werde wirklich glücklich sein für irgendeinen Rat.

Hier ist mein vereinfachten Code:

$filename = 'data.txt'; 
$fupids = array(); 

$handle = fopen($filename, "r"); 
if (!$handle) exit; 

    while (($line = fgets($handle)) !== false) { 
     if (preg_match_all('/([0-9]{8})/',$line,$output)) { 
      $fupid = $output[0]; 
      $file = fopen('data.csv', 'a+'); 
      fputcsv($file, array_unique($output[0]));   
     } 
    } 
fclose($file); 

Hier ist mein vereinfachte data.txt:

10153231,10159512,10159512,10159512 
10141703,10160541,10160541 
10165815,10158007,10158007 

aktuelle CSV-Ausgabe:

10153231,10159512 
10141703,10160541 
10165815,10158007 

wünschenswert Ausgang ist nur eine Zeile oder vielleicht besser eine Spalte wie diese:

10153231,10159512,10141703,10160541,10165815,10158007 

Vielen Dank für Ihre Hilfe.

+0

Ist die Datei 'data.csv' bereits vorhanden ist, wenn das Skript beginnt? Und gut, was willst du? Eine Zeile oder eine Spalte? Wie groß ist die Eingabedatei? –

+0

Es spielt keine Rolle, aber ja data.csv existiert und es ist leer. Wie gesagt, es spielt keine Rolle, ob es eine Zeile oder eine Spalte ist, ich nehme beide Lösungen. Größe der Eingabedatei is150mb Protokolle der Textdaten. Ich werde völlig zufrieden sein, wenn ich Lösung für diesen Satz von Daten bekommen werde, um es in 1 Reihe oder Spalte umzuwandeln. – Simon

Antwort

0

Vielleicht so etwas wie dieses (nicht getestet): (Idee: doppelte Schlüssel werden überschrieben mit array_merge)

$filename = 'data.txt'; 
$fupids = []; 

if (false === $hin = fopen($filename, 'r')) 
    throw new Exception('unable to open input file'); 

if (false === $hout = fopen('data.csv', 'a+')) 
    throw new Exception('unable to open output file'); 

while (false !== $fields = fgetcsv($hin)) { 
    $fupids = array_merge($fupids, array_flip($fields)); 
} 

fclose($hin); 
fwrite($hout, implode(',', array_keys($fupids))); 
fclose($hout); 
+0

folgende Fehler erschienen: Hinweis: Nicht definierte Variable: fupid in C: \ ... \ selectfup id.php auf Leitung 18 Warning: array_keys() erwartet Parameter 1 Array zu sein, null in C angegeben: \. .. \ selectfupid.php in Zeile 18 Warnung: implode(): Ungültige Argumente in C übergeben: \ ... \ selectfupid.php Zeile 18 – Simon

+0

@Simon: Es ist nur ein Tippfehler, '$ fupid' =>' $ Fupiden'. –

+0

Ich finde das mit $ array = array_merge ($ array, $ output [0]) heraus; – Simon

Verwandte Themen