Solved

PHP- Writing $_Post array to CSV

Posted on 2013-11-01
5
573 Views
Last Modified: 2013-11-30
Afternoon
I hope you can help me, I am new to PHP,

I have posted an Array to a .php file as below.

Array
(
    [id] => Array
        (
            [0] => 1
            [1] => 2
            [2] => 3
            [3] => 4
        )

    [S1] => Array
        (
            [0] => AW01
            [1] => AW01
            [2] => AW02
            [3] => AW03
        )

    [S2] => Array
        (
            [0] => 1234
            [1] => 4567
            [2] => 9874
            [3] => 1265
        )

    [S3] => Array
        (
            [0] => 1
            [1] => 1
            [2] => 2
            [3] => 5
        )

    [S5] => Array
        (
            [0] =>
            [1] => yui
            [2] =>
            [3] =>
        )

    [S6] => Array
        (
            [0] =>
            [1] =>
            [2] =>
            [3] =>
        )

    [S4] => Array
        (
            [0] => 1
            [1] => 1
        )

    [FormSubmit] => Submit
)

I want to write the Array to a CSV file So i can read it as

ID                S1                   S2                  S3                      S4              S5                 S6
1                 AW01            1234                 1                     1                  yui
2                  AW01            4567               1                       1                
3 etc
4 etc
I hope you can help as i have been going through this for Days and days without any luck.
Thanks in Advance.
0
Comment
Question by:Q_evans
  • 2
  • 2
5 Comments
 
LVL 42

Expert Comment

by:Chris Stanyon
ID: 39617399
Have a read through this and see how you get on:

<?php
		
//the data
$data = array(
	'id' => array(1,2,3,4),
	's1' => array('AW01','AW01','AW02','AW03'),
	's2' => array('1234', '4567', '9874', '1265'),
	's3' => array(1,1,2,5),
	's4' => array(1,1),
	's5' => array(null, 'yui',null,null),
	's6' => array(null, null, null, null),
);		

//get the row headers
foreach ($data as $key => $info):
	$rowHeaders[] = $key;
endforeach;

//count the rows
$count = count($data['id']);

//loop through the data
for ($i=0; $i < $count; $i++) {
	//temp place holder for each row	
	$rowData = array();
	//get the right index from the right key
	foreach ($data as $key => $info):
		//make sure it's set before trying to add it
		if (isset($data[$key][$i])) $rowData[] = $data[$key][$i];
	endforeach;
	
	$rows[] = $rowData;
};

//open a file for writing
$file = fopen("data.csv","w");

//put the header row
fputcsv($file,$rowHeaders);

//loop through the records
foreach ($rows as $row):
	//write the record
	fputcsv($file,$row);	
endforeach;

//close the file
fclose($file);

?>

Open in new window

0
 

Author Comment

by:Q_evans
ID: 39617420
Hi Chris Thanks for that.

The Posted Array will change everytime as it is taken from a table from the page before.

So yes this works great, although I need the Arrays from the $_Post array. to be wirtten to the CSV? I hope this makes sense.

Regards
0
 
LVL 42

Accepted Solution

by:
Chris Stanyon earned 300 total points
ID: 39618659
OK. If the format of the POST array stays the same, then you just need to change $data to $_POST. I hardcoded it for testing purposes as I don't have your HTML Form:

<?php
//get the row headers
foreach ($_POST as $key => $info):
	$rowHeaders[] = $key;
endforeach;

//count the rows
$count = count($_POST['id']);

//loop through the data
for ($i=0; $i < $count; $i++) {
	//temp place holder for each row	
	$rowData = array();
	//get the right index from the right key
	foreach ($_POST as $key => $info):
		//make sure it's set before trying to add it
		if (isset($_POST[$key][$i])) $rowData[] = $_POST[$key][$i];
	endforeach;
	
	$rows[] = $rowData;
};

//open a file for writing
$file = fopen("data.csv","w");

//put the header row
fputcsv($file,$rowHeaders);

//loop through the records
foreach ($rows as $row):
	//write the record
	fputcsv($file,$row);	
endforeach;

//close the file
fclose($file);

?>

Open in new window

0
 
LVL 108

Expert Comment

by:Ray Paseur
ID: 39618907
$_Post is probably not correct.  Variable names are case-sensitive in PHP, so you probably want $_POST.

If you want to show us the HTML form that is used to gather the data we might be able to test a little better.
0
 

Author Comment

by:Q_evans
ID: 39619204
Thanks ChrisStanyon, Works a treat...
0

Featured Post

What Is Threat Intelligence?

Threat intelligence is often discussed, but rarely understood. Starting with a precise definition, along with clear business goals, is essential.

Join & Write a Comment

Consider the following scenario: You are working on a website and make something great - something that lets the server work with information submitted by your users. This could be anything, from a simple guestbook to a e-Money solution. But what…
Foreword (July, 2015) Since I first wrote this article, years ago, a great many more people have begun using the internet.  They are coming online from every part of the globe, learning, reading, shopping and spending money at an ever-increasing ra…
The viewer will learn how to count occurrences of each item in an array.
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.

708 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

13 Experts available now in Live!

Get 1:1 Help Now