Frage

Ich habe ein Stück von PHP-Code, die Werte aus einer Datenbank des Suchresultates liest, schiebt sie in ein Array, und schreibt sie in eine CSV-Datei. Ich brauche jeden Wert zu zwingen, durch doppelte Anführungszeichen gesetzt werden, wenn sie in die CSV-Datei geht, und kann mich nicht für das Leben erinnern, wie dies zu tun.

Hier ist die Schleife, dass Schreiben in die Datei (die eigentlich in einer anderen Schleife enthalten ist, durch jede Zeile zu gehen, diese Schleife zeige ich die Spalten durchläuft in der aktuell ausgewählten Zeile):

foreach ($row as $key => $val){

    $newrow[$key] = preg_replace("(\r\n|\n|\r|\t)", "", $val);

}

fputcsv ($ fp, $ NewRow);

Was ich brauche, ist für den Wert von $ val in doppelten Anführungszeichen eingeschlossen werden, wenn es in die Datei geschrieben wird. Gerade jetzt, die Ergebnisse bekomme ich wie folgt aussehen:

554,702180,25.00,6FYAK0,9090909090909090

Was ich brauche, ist dies:

"554","702180","25.00","6FYAK0","9090909090909090"

Kann jemand springen mein Gehirn starten?

War es hilfreich?

Lösung

würde ich Ersatzfunktion für fputscsv verwenden:

function my_fputcsv($handle, $fieldsarray, $delimiter = ",", $enclosure ='"'){
    $glue = $enclosure . $delimiter . $enclosure;
    return fwrite($handle, $enclosure . implode($glue,$fieldsarray) . $enclosure);
}

Andere Tipps

einen Blick auf die fputscsv Befehl Hilfe auf der PHP-Website haben: http: // php .net / manual / en / function.fputcsv.php

Der vierte Parameter gibt ein Gehäuse Charakter. Suchst du danach? Von dem, was ich verstehe, aber wird ein CSV-Put nur die Anführungszeichen enthält, wenn das Feld selbst erfordert es im Bereich enthalten, weil entweder von delimeter Zeichen oder Gehäuse Zeichen.

Dies ist eine schnelle Lösung, aber es funktioniert.

$value = '554,702180,25.00,6FYAK0,9090909090909090';

$new_value = '"' . implode('","', explode(',', $value)) . '"';

echo $new_value;

Es scheint einfach genug:

 $newrow[$key] = '"' . preg_replace("(\r\n|\n|\r|\t)", "", $val) . '"';

Wenn Sie wollen, es zu schreiben, ohne fputscsv dann könnte man eine ähnliche Funktion wie diese verwendet, um eine Zeile zu schreiben, um eine Datei zu erzeugen:

function csvify ($array)
{
   $temp = "";
   $counter = 0;
   foreach ($array as $element)
   {
      if ($counter > 0)
         $temp = $temp . ",";
      $counter ++;
      $temp = $temp . "\"$element\"";
   }
   return $temp;
}
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top