Skip to content
Advertisement

PHP Wrap ALL fields in quotes fputcsv()

I’m relatively new to PHP so please bear with me.

my code currently looks like this:

<?php

require("database.php");

$localfile = "FileName.csv";
$fp = fopen($localfile, "w"); 
$enclosure = '"';
$delimiter = ',';

if(!$link)
{
    echo "DB Connection ERROR";
}

$query = "SELECT * FROM A_Table WHERE Stuff";

$result=mysqli_query($link,$query);

while($row = mysqli_fetch_assoc($result))
    {
        fputcsv($fp,$row,$delimiter,$enclosure);
    }

fclose($localfile);

?>

This works as expected, however, the client requires ALL fields to be wrapped in quotations, not just those containing spaces. I’ve seen a lot of solutions online but they all seem overly complicated or seem to suggest that I should edit the CSV once it’s exported.

If this is the case then I shall persevere but does anybody have a relatively simple solution for my dilemma?

Example

Normal code will output: col1,col2,"col 3",col4

I would like to output: "col1","col2","col 3","col4"

Any help would be much appreciated.

Thanks in advance, Paul

Advertisement

Answer

Try this for inspiration. You can replace the $row argument to fputcsv() with the array_map() line you see in my demo here:

<?php

// Sample values
$unquoted = ['these', 'are', 'some', 'unquoted', 'example', 'values'];

// One-liner to quote every array element and output to new array.
$quoted = array_map(function ($element) { return ""$element""; }, $unquoted);

var_dump($quoted);
/*
Output:
array(6) {
  [0]=>
  string(7) ""these""
  [1]=>
  string(5) ""are""
  [2]=>
  string(6) ""some""
  [3]=>
  string(10) ""unquoted""
  [4]=>
  string(9) ""example""
  [5]=>
  string(8) ""values""
}
*/
User contributions licensed under: CC BY-SA
1 People found this is helpful
Advertisement