Solved

PHP- Writing $_Post array to CSV

Posted on 2013-11-01
5
607 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
[X]
Welcome to Experts Exchange

Add your voice to the tech community where 5M+ people just like you are talking about what matters.

  • Help others & share knowledge
  • Earn cash & points
  • Learn & ask questions
  • 2
  • 2
5 Comments
 
LVL 43

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 43

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 110

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

Why Off-Site Backups Are The Only Way To Go

You are probably backing up your data—but how and where? Ransomware is on the rise and there are variants that specifically target backups. Read on to discover why off-site is the way to go.

Question has a verified solution.

If you are experiencing a similar issue, please ask a related question

These days socially coordinated efforts have turned into a critical requirement for enterprises.
3 proven steps to speed up Magento powered sites. The article focus is on optimizing time to first byte (TTFB), full page caching and configuring server for optimal performance.
Learn how to match and substitute tagged data using PHP regular expressions. Demonstrated on Windows 7, but also applies to other operating systems. Demonstrated technique applies to PHP (all versions) and Firefox, but very similar techniques will w…
The viewer will learn how to look for a specific file type in a local or remote server directory using PHP.

688 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