Solved

Help with fputcsv

Posted on 2008-10-24
4
543 Views
Last Modified: 2010-04-21
I'm exporting an array to a csv file, but it isn't formatting correctly,

This is the array:

Array ( [0] => Array ( [id] => 41 [item] => HY87MB [cost] => $43,679 ) [1] => Array ( [id] => 39 [item] => UYITHO [cost] => $79,202.10 ) )

And the csv file looks like this:
41,HY87MB,$43,679
39,UYITHO,$9,202.10

When, I want it to look like this:
41,"HY87MB","$43,679"
39,"UYITHO","$9,202.10"
/* HERE IS THE CODE I'M USING */
 

$fp = fopen(testfile.csv', 'w');

foreach($result as $line) {

                foreach($line as $line2) {

                                fputcsv($fp, split(',',$line2));

                }

}

fclose($fp);

header('Location: testfile.csv');

Open in new window

0
Comment
Question by:n00b0101
  • 2
  • 2
4 Comments
 
LVL 15

Expert Comment

by:MMDeveloper
Comment Utility
have you tried forcing the additional arguments?

fputcsv($fp, split(',',$line2), ",", "\"");
0
 

Author Comment

by:n00b0101
Comment Utility
Yes, I did try that, but I got the same result.
0
 
LVL 15

Accepted Solution

by:
MMDeveloper earned 500 total points
Comment Utility
as a temporary workaround, try this class. I just wrote it and have not tested it.
<?php
 
 

class putcsv {

	public $fp = NULL;

	public $row = array();
 

	public function putCSV($row) {

		$this->row = $row;
 

		$data = array();
 

		foreach ($row as $k => $v) {

			$data[] = $this->formatCSVCell($v);

		}
 

		fwrite($this->fp, implode(",", $data) . "\n");

	}
 

	private function formatCSVCell($data) {

		$useQuotes = false;
 

		$quotable = array (

				"\"" => "\"\"",

				"," => ",",

				"\n" => "\n",

				"$", "$"

			);
 

		foreach ($quotable as $char => $repl) {

			if (eregi($char, $data)) {

				$useQuotes = true;

			} else {}

		}
 

		if ($useQuotes == true) {

			foreach ($quotable as $char => $repl) {

				$data = str_replace($char, $repl, $data);

			}
 

			$data = "\"" . $data . "\"";

		}

		else {
 

		}
 

		return $data;

	}

}
 

$putcsv = new putcsv();

$putcsv->fp = fopen("file.csv", "w+");
 

foreach ($lines as $line) {

	$putcsv->putCSV($line);

}

fclose($putcsv->fp);

?>

Open in new window

0
 

Author Closing Comment

by:n00b0101
Comment Utility
thanks for this
0

Featured Post

Top 6 Sources for Identifying Threat Actor TTPs

Understanding your enemy is essential. These six sources will help you identify the most popular threat actor tactics, techniques, and procedures (TTPs).

Join & Write a Comment

Both Easy and Powerful How easy is PHP? http://lmgtfy.com?q=how+easy+is+php (http://lmgtfy.com?q=how+easy+is+php)  Very easy.  It has been described as "a programming language even my grandmother can use." How powerful is PHP?  http://en.wikiped…
Developers of all skill levels should learn to use current best practices when developing websites. However many developers, new and old, fall into the trap of using deprecated features because this is what so many tutorials and books tell them to u…
The viewer will learn how to dynamically set the form action using jQuery.
This tutorial will teach you the core code needed to finalize the addition of a watermark to your image. The viewer will use a small PHP class to learn and create a watermark.

763 members asked questions and received personalized solutions in the past 7 days.

Join the community of 500,000 technology professionals and ask your questions.

Join & Ask a Question

Need Help in Real-Time?

Connect with top rated Experts

12 Experts available now in Live!

Get 1:1 Help Now