Wie Werte in PHP-Anweisung zu zitieren? Montag brain freeze
-
28-09-2019 - |
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?
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;
}