By using this site, you agree to our updated Privacy Policy and our Terms of Use. Manage your Cookies Settings.
437,949 Members | 1,855 Online
Bytes IT Community
+ Ask a Question
Need help? Post your question and get tips & solutions from a community of 437,949 IT Pros & Developers. It's quick & easy.

Appending csv data to an Array

P: 22
Hi,

I want to grab data from a .csv file and add all the data to the array. I have the part where I'm grabbing the data from the .csv file but the array issue I haven't totally figured out.

Currently, I'm not adding all the data just the last row of data to the array and need help trying to add all the data to the array. Can someone please help me accomplish this. This is what I have:

[PHP]
global $info;
ini_set("auto_detect_line_endings", 1);
$current_row = 1;
$handle = fopen("adduser.csv", "r");
$info="";
while ( ($data = fgetcsv($handle, 10000, ",") ) !== FALSE )
{
$number_of_fields = count($data);
if ($current_row == 1)
{
//Header line
for ($c=0; $c < $number_of_fields; $c++)
{
$header_array[$c] = $data[$c];
}
}
else
{
//Data line
for ($c=0; $c < $number_of_fields; $c++)
{
$data_array[$header_array[$c]] = $data[$c];
}
print_r($data_array);
$info = $data_array;
}
$current_row++;
}
//buildBatchXML($data_array);

echo "<br><br>This is new data:<br><br>";
foreach($info as $key => $value)
{
echo "$key - $value<br>";
}

fclose($handle);

?>

[/PHP]
Feb 17 '08 #1
Share this Question
Share on Google+
3 Replies


ronverdonk
Expert 2.5K+
P: 4,258
The array only contains the date of the last csv row because you use a 'flat' array, i.e. its format is:
Expand|Select|Wrap|Line Numbers
  1. $data_array Array {
  2.        ['heading_1'] = col_1_data
  3.        ['heading_2'] = col_2_data
  4.        ['heading_x'] = col_x_data
  5. }
  6.  
while what you want is:
Expand|Select|Wrap|Line Numbers
  1. $data_array Array {
  2.        [0]  ['heading_1'] = row1_col_1_data
  3.             ['heading_2'] = row1_col_2_data
  4.             ['heading_x'] = row1_col_x_data
  5.        [1]  ['heading_1'] = row2_col_1_data
  6.             ['heading_2'] = row2_col_2_data
  7.             ['heading_x'] = row2_col_x_data
  8.        [n]  ['heading_1'] = rown_col_1_data
  9.             ['heading_2'] = rown_col_2_data
  10.             ['heading_x'] = rown_col_x_data
  11. }
  12.  
so use the $current_row counter as the first level index for the output array. You'll have to initizalize it to 0 instead of 1.
The array walking should have an extra 'foreach' because you also have to walk the numeric indexes. I removed the $info because it serves no purpose, only costs storage. See next code .
[php]
<?php
global $info;
ini_set("auto_detect_line_endings", 1);
// ======= Next statement changed =========//
$current_row = 0;
$handle = fopen("adduser.csv", "r");
while ( ($data = fgetcsv($handle, 10000, ",") ) !== FALSE )
{
$number_of_fields = count($data);
// ======= Next statement changed =========//
if ($current_row == 0)
{
//Header line
for ($c=0; $c < $number_of_fields; $c++)
{
$header_array[$c] = $data[$c];
}
}
else
{
//Data line
for ($c=0; $c < $number_of_fields; $c++)
{
// ======= Next statement changed =========//
$data_array[$current_row][$header_array[$c]] = $data[$c];
}
print_r($data_array);
}
$current_row++;
}
//buildBatchXML($data_array);

echo "<br><br>This is new data:<br><br>";
// ======= Next 2 statements added/changed =========//
foreach ($data_array as $csvrow) {
foreach($csvrow as $key => $value)
{
echo "$key - $value<br>";
}
}
fclose($handle);

?>
[/php]
Ronald
Feb 17 '08 #2

P: 22
thank you so much that really helped my understanding.
Feb 18 '08 #3

ronverdonk
Expert 2.5K+
P: 4,258
thank you so much that really helped my understanding.
Glad to be of help. Are you set now? See you again.

Ronald
Feb 18 '08 #4

Post your reply

Sign in to post your reply or Sign up for a free account.