1

I am working on a project to create 2 column CSV using PHP and i have the data stored as strings in 2 different variables . Consider below example of what i have and what i need further. Thank you in advance.

I have below 2 variables and data stored inside them. (data is separated by comma)

$title = title1,title2,title3,title4,title5..and so on
$values = value1,value2,value3,value4,value5..and so on

I need this array pattern like this

 $multi_array = array
  (
  array(title1,value1),
  array(title2,value2),
  array(title3,value3),
  );

I will then use the below code to generate 2 column CSV via PHP

    // open the file "demosaved.csv" for writing
$file = fopen('demosaved.csv', 'w');

// save the column headers
fputcsv($file, array('Column 1', 'Column 2'));

// save each row of the data
foreach ($multi_array as $row)
{
fputcsv($file, $row);
}

// Close the file
fclose($file);

1 Answer 1

1

Since the values are comma separated strings, explode them into arrays:

$title  = explode(",", $title);
$values = explode(",", $values);

Then you can just use the key to match up the values from each array (assuming that they are the same length):

foreach ($values as $key => $val)
{
    fputcsv($file, [$title[$key], $val]);
}

Or combine them:

$multi_array = array_combine($title, $value);

foreach ($multi_array as $title => $value)
{
    fputcsv($file, [$title, $value]);
}

If you're on an old version of PHP you'll need array() instead of [ ].

From the OP, since there many be duplicates in the string that would be duplicate keys: "use the below code to perform the same job and even keep the duplicate keys. PHP array_combine removes the duplicate array entries but below code keeps all entries:"

$arrKeys = array('str', 'str', 'otherStr');
$arrVals = array('1.22', '1.99', '5.17');
function foo($key, $val) {
   return array($key=>$val);
}

$arrResult = array_map('foo', $arrKeys, $arrVals);

print_r($arrResult);
Sign up to request clarification or add additional context in comments.

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.